1 名前:デフォルトの名無しさん [2008/10/01(水) 07:28:51 BE:151474728-PLT(18888)] あなたが解けない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++の宿題を片付けます 115代目 pc11.2ch.net/test/read.cgi/tech/1217741118/
108 名前:106 mailto:sage [2008/10/06(月) 07:40:39 ] >>107 うpろだの内容はそのままビルドできんかったので 1.zako_01.cppを新規に作成 2.zako.cppをコピペ 3.teki_reqをtei_01_reqに変更 4.teki_dpをteki_01_dpに変更 5.読みにくかったので全面書き替え!! 5.teki_01_dpに>>106 のを書いた 6.teki_01_reqは固定位置出現にした 最終動きのイメージを今見たんだがハチの字の方向が違うかもしれん そこはまぁ適当によろしこ ちなみにPIは3.141592にdefineしてある
109 名前:106 mailto:sage [2008/10/06(月) 07:41:46 ] 書き忘れた もう仕事に行く時間なので 夜になるまで応答できないかも
110 名前:74 ◆5/7mhL.nO6 mailto:sage [2008/10/06(月) 08:11:20 ] >>109 ありがとうございます。 やってみるので、夜になったらまた見てもらえますか? それまで自分でやってみます。
111 名前:21 [2008/10/06(月) 11:27:20 ] >>61 よし動いた。 ・・・あれ肝心のソートがされてないorz 誰か13時までに原因を教えてください。
112 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 12:01:51 ] 1] 授業単元:C++ [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7745.txt ・「年(西暦)」「月」を入力したら,その月のカレンダーを表示するプログラムを作成しなさい。ただし,下記の条件を満たすものとする。 【条件】 (1)カレンダークラスを作成し,main関数でカレンダークラスの実体を生成し,カレンダークラス内のメンバ関数(show関数)を呼び出してカレンダーを表示する。 (2)カレンダークラスはカプセル化されていること。 (3)カレンダー表示には,年,月および曜日,日を表示すること。 (4)上記以外については自由に作成してよい。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual Studio 2008 [3.3] 言語:C++ [4] 期限: ([2008年10月8日
113 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 17:59:06 ] >>112 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7755.cpp 問題文のリンクを元に作ったけども 正直カレンダークラスに year と month ないほうが綺麗になると思う
114 名前:デフォルトの名無しさん [2008/10/06(月) 18:40:58 ] [1] 授業単元:プログラミング演習 [2] n*3がたの行列Aと3*mの行列Bの積を計算する プログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc バージョン5.5 [3.3] 言語:C [4] 期限: 10月9日 [5] その他の制限:特にありません よろしくお願いします。素人でもわかりやすい作りに していただければ幸いです。
115 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 18:40:59 ] >>113 そんなに無理矢理三項演算子使わなくても…
116 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 18:53:21 ] >>115 使わないと分かりにくいかなと思って使ったんだけども・・・ 取っても結果同じだから、違和感あるなら取ってね
117 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 19:22:49 ] #include<stdio.h> #define n 2 #define m 4 int main(){ int A[n][3] ={{1,2,3}, {4,5,6}}; int B[3][m] ={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}}; int C[n][m],i,j,k,t; for(i=0;i<n;i++){ for(j=0;j<m;j++){ for(t=0,k=0;k<3;k++){ t += A[i][k]*B[k][j]; } C[i][j] = t; } } //A for(i=0;i<n;i++){ for(j=0;j<3;j++){ printf("%3d",A[i][j]); } printf("\n"); } //B for(i=0;i<3;i++){ for(j=0;j<m;j++){ printf("%3d",B[i][j]); } printf("\n"); } //C for(i=0;i<n;i++){ for(j=0;j<m;j++){ printf("%3d",C[i][j]); } printf("\n"); } }
118 名前:74 ◆5/7mhL.nO6 [2008/10/07(火) 00:33:44 ] >>108 のように書いたのですが、 このようなエラーはどう対処したら宜しいのでしょうか? ..\zako_01.cpp(52) : warning C4305: '初期化中' : 'double' から 'float' へ切り詰めます。 ..\zako_01.cpp(66) : error C2065: 'PI' : 定義されていない識別子です。 ..\zako_01.cpp(70) : warning C4305: '=' : 'double' から 'float' へ切り詰めます。 ..\zako_01.cpp(72) : warning C4305: '=' : 'double' から 'float' へ切り詰めます。
119 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 00:42:13 ] #define PI 3
120 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 00:55:07 ] 笑ったけど本気にしたらかわいそうだ >>118 #define PI 3.141592 warningってのは警告だから無視すればいい
121 名前:デフォルトの名無しさん [2008/10/07(火) 01:35:20 ] [1] C言語演習 [2] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7756.txt kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7757.txt kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7758.txt [3] C [4] 今週の水曜日 よろしくお願いします。
122 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 02:49:18 ] >>118 > >>108 のように書いたのですが、 >>108 > ちなみにPIは3.141592にdefineしてある はぁ。
123 名前:74 ◆5/7mhL.nO6 [2008/10/07(火) 04:23:57 ] >>119 >>120 >>122 すみません見落としていました… とりあえず、>>106 を参考に作りました。 www.dotup.org/uploda/www.dotup.org6018.zip.html するとこのようなエラーが出るのですが…ファイルを見て確認してみて下さい。 zako_01.obj : error LNK2005: "float * zy" (?zy@@3PAMA) は既に zako.obj で定義されています。 zako_01.obj : error LNK2005: "int * init_fl" (?init_fl@@3PAHA) は既に zako.obj で定義されています。 zako_01.obj : error LNK2005: "float * spy" (?spy@@3PAMA) は既に zako.obj で定義されています。 zako_01.obj : error LNK2005: "float * spx" (?spx@@3PAMA) は既に zako.obj で定義されています。 zako_01.obj : error LNK2005: "float * spyg" (?spyg@@3PAMA) は既に zako.obj で定義されています。 zako_01.obj : error LNK2005: "float * zx" (?zx@@3PAMA) は既に zako.obj で定義されています。 zako_01.obj : error LNK2005: "float * spxg" (?spxg@@3PAMA) は既に zako.obj で定義されています。
124 名前:74 ◆5/7mhL.nO6 [2008/10/07(火) 06:01:05 ] >>123 のエラーは全て自己解決しました。 普通にコンパイルできるのにちゃんと表示されないのですが… www.dotup.org/uploda/www.dotup.org6039.zip.html >>108 のようにやったのに表示されません…
125 名前:106 mailto:sage [2008/10/07(火) 07:40:12 ] すまん。もともとあった内容は省略して書いてた。 ----- こっから //アニメーション----------------------------- timer_a[cnt]+=FrameTime; if(timer_a[cnt]>0.1){ timer_a[cnt]=0; no_a[cnt]++; if(no_a[cnt]>9) no_a[cnt]=0;//アニメーションのループ } //敵の表示 elDraw::Layer((int)zx_a[cnt],(int)zy_a[cnt],tkBMP[cnt],40*no_a[cnt],0,40*no_a[cnt]+40,40); // SHOW2((int)zx[cnt],(int)zy[cnt]-5,"no= %d",cnt); }//リクエスト if end }//for end if(out_cnt==17){//17個全て消えたか? for(cnt=0;cnt<17;cnt++){ init_fl_a[cnt]=0; } ---- ここまで をkadai_d_dpの最後に追加してみそ。 分かってるとは思うが //敵の表示 elDraw::Layer((int)zx_a[cnt],(int)zy_a[cnt],tkBMP[cnt],40*no_a[cnt],0,40*no_a[cnt]+40,40); のコールでビットマップを描画してるので これ消したら当然何も出ない罠
126 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 07:58:09 ] >>124 表示してないからあたりまえ #define PI 3.141592F void teki_01_dp(void) { static int no[17];//アニメ用 static float timer[17];//アニメ用 static float n = 0.0F; static float inc = 0.1F; int cnt; for (cnt = 0; cnt < 17; cnt++) { if (init_fl_01[cnt] != 0) { zx_01[cnt] += cos(n * PI / 180) * FrameTime * 100; zy_01[cnt] += sin(n * PI / 180) * FrameTime * 100; n += inc; if (n >= 180.0) { inc = -0.1F; } else if (n <= -180.0) { inc = 0.1F; } timer[cnt]+=FrameTime; if(timer[cnt]>0.1){ timer[cnt]=0; no[cnt]++; if(no[cnt]>9) no[cnt]=0;//アニメーションのループ } elDraw::Layer((int)zx_01[cnt],(int)zy_01[cnt],tkBMP[cnt],40*no[cnt],0,40*no[cnt]+40,40); } } }
127 名前:74 ◆5/7mhL.nO6 [2008/10/07(火) 08:04:53 ] >>125 >>126 できました!ありがとうございます! これを元に波線の軌道もやってみますので、分からなくなったら再び質問します。
128 名前:112 mailto:sage [2008/10/07(火) 10:41:20 ] >>113 デバックしましたけど何も表示されませんでした。
129 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 11:03:35 ] >>128 デバック??? 「修正してやったぜ」って意味か? 失礼な奴だな 知らない言葉は調べたほうがいいぜ
130 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:27:22 ] デバッグ実行のことじゃね
131 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:39:16 ] VSが「デバッグ開始」て書いてあるから間違って覚えたんだろ
132 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:41:45 ] >>128 コマンドライン引数が無いときの処理が無いからな
133 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 13:10:31 ] >>121 2番目の問題だけ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7759.txt
134 名前:21 mailto:sage [2008/10/07(火) 16:58:43 ] 誰か61のプログラムでソートされない原因を 教えてください。 お願いします
135 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:07:23 ] >>134 やってみたらソートされたが、どんなデータを与えたの?
136 名前:21 mailto:sage [2008/10/07(火) 17:12:27 ] >>135 ./kadai3-2 s sa と入力しました。./kadai3-2が実行プログラムで Sが読み込ませるプログラムでsa
137 名前:21 mailto:sage [2008/10/07(火) 17:14:56 ] すいません途切れました。 saが出力させるファイルで sの中身は1,2,3,4,5,6,7,という 数字が記録されています。 実行するとsaの中身は 1,2,3,4,5,6,7となっていて ソートされてないのです。
138 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:20:01 ] >>137 落ち着けよ 意味がわからんよ
139 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:24:26 ] >>137 見事にソートされているように見えるんだが。。 たとえばsを 3,6,1,5,2,7,4 という内容にしてみたら。 ソートの意味がわかっていないのか、それとも>>21 の思っているソートがこちらに伝わっていないのか。
140 名前:21 mailto:sage [2008/10/07(火) 17:35:18 ] あっ、あぁ、ほんとだ。 ごめんなさい。 いつのまにか俺のなかで ソートの種類が勝手に順番を逆にするソート にすり変わってたorz 思い込みってやだな。 お手数かけました。 心よりお詫び申し上げます。
141 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:54:06 ] [1] 初級プログラミング [2] #include <stdio.h> int main(void){ int a,b,c,d,e,f,g,h,i,j,k,l,m;//a〜m(13個,数は固定)には整数0か1が毎回ランダムに入るとしてください a=1;b=0;c=0;d=1;e=0:f=1;g=1;h=1;i=1;j=0;k=1;l=1;m=0;//例 printf("%d",a); printf("%d",b); printf("%d",c); printf("%d",d); printf("%d",e); printf("%d",f); printf("%d",g); printf("%d",h); printf("%d",i); printf("%d",j); printf("%d",k); printf("%d",l); printf("%d",m); printf("\n"); //表示 1001011110110 /*以下に13ビットの値を16進数に変換するプログラムを記述せよ*/ printf("%d",?); printf("%d",?); printf("%d",?); printf("%d",?); printf("\n"); return 0; } abcdefghijklmが 1001011110110 の時は 12f6 と表示 aが4桁めb〜eが3桁めf〜iが2桁めj〜mが1桁めとなるようにする [3] 環境 [3.1] OS:linux [3.2] gcc3.4 [3.3] c [4] 期限: 10/8 [5] その他の制限:なし
142 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 18:01:51 ] >>141 ?を埋める形じゃないとだめ?
143 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 18:05:07 ] というわけでもないと思うので、こうしてみたよ。 printf("%d",a); printf("%x", b*8+c*4+d*2+e); printf("%x", f*8+g*4+h*2+i); printf("%x", j*8+k*4+l*2+m); もしくは printf("%d",a); printf("%x", b<<3|c<<2|d<<1|e); printf("%x", f<<3|g<<2|h<<1|i); printf("%x", j<<3|k<<2|l<<1|m);
144 名前:141 mailto:sage [2008/10/07(火) 18:06:39 ] >>142 ?は自分がこんな感じかなと勝手に考えて書いたものですので 無視してもらっても大丈夫です。
145 名前:141 mailto:sage [2008/10/07(火) 18:20:49 ] >>142 ,143 ありがとうございます。出来ました。
146 名前:デフォルトの名無しさん [2008/10/07(火) 20:51:46 ] ソース kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7760.txt データ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7761.txt テキスト形式のデータを読み込んで,マージソートをして ナップサック問題をとくソートなんだが item数 n = 100 重量制限 B = 2000 データは item p[i] w[i]の順に並んでるよ ここにいてるできる奴ならもっと短くできるよね B5に収まるくらいの美しいソートおしえてたもれ <stdio.h><stdlib.h><math.h>くらいだけで シンプルにできる人、たのんます あっしのノー味噌ではうつくしくできないので.
147 名前:146 [2008/10/07(火) 20:58:31 ] ×美しいソート ○美しいソース です; 頭んなか、ソートだらけか….
148 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 21:15:30 ] >>1 くらい読め
149 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 21:15:47 ] >>146 qsort を使うとか
150 名前:146 [2008/10/07(火) 21:28:19 ] >>148 宿題を解いて,もっと短くできるから やってみろって言われたんです; テンプレどおりに書かなかったのはすみません。 >>149 マージソートで、数十行くらいで作れるらしいです。 それをやれといわれました; 教科書通りにやるのはできるんですが 短くするとなると、なかなか凡人クラスの頭のキレでは難しくて.
151 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 21:37:13 ] つstdlib.h
152 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 22:46:55 ] まず、このソースが何をしていて、どの辺で苦労して、どのあたりが改善できそうであるかを言ってみて。
153 名前:デフォルトの名無しさん [2008/10/07(火) 23:05:45 ] 1] 授業単元: 基礎プログラミング [2] ニュートンラプソン法を用いてnのルート、及び逆数の関数を作成せよ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 10/8 24:00
154 名前:デフォルトの名無しさん [2008/10/08(水) 02:34:55 ] >>153 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7762.txt
155 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 02:40:07 ] ありゃageになってたすまぬ
156 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 04:21:05 ] ttp://ja.wikipedia.org/wiki/%E7%B4%A0%E6%95%B0 > 2008年8月、史上最大の素数探求のための分散コンピューティング・プロジェクトである > GIMPSによって、その時点で史上最大とされる素数が発見された。これは知られている中で > 46番目のメルセンヌ素数、243112609 - 1 であり、十進記数法で表記したときの桁数は > 1297万8189桁に及ぶ。 上記の史上最大とされる素数を求めるプログラムきぼんぬ
157 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 09:32:16 ] >>156 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7764.c
158 名前:157 [2008/10/08(水) 09:51:30 ] 2^nの1桁目は0にならないから最後1引くのにループはいらなかった
159 名前:157 [2008/10/08(水) 09:54:31 ] #define END_POINT 243112609 は #define END_POINT 43112609 の間違いだな(>>156 のをそのままコピペしてしまった)
160 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 11:22:20 ] >>156 #include <stdio.h> #define MER_P 43112609 int main(void) { int i; printf("(2^%d) - 1 =\n", END_POINT); for (i = 0; i < MER_P; i++) { printf("1"); } printf("\n(2進数)\n"); return 0; }
161 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 11:23:22 ] 間違えた #include <stdio.h> #define MER_P 43112609 int main(void) { int i; printf("(2^%d) - 1 =\n", MER_P); for (i = 0; i < MER_P; i++) { printf("1"); } printf("\n(2進数)\n"); return 0; }
162 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 13:13:55 ] [1] 授業単元:C++ [2] 問題文(含コード&リンク): すごろくプログラムを作成しなさい。ただし,下記の条件を満たすものとする。 ・すごろくのコマとしてユーザクラスを作成しなさい。 ・すごろくのコマを移動させる場所としてマスクラスを作成しなさい。 ・main関数でユーザクラスの実体(2つ以上)とマスクラスの実体(5つ以上)を生成しなさい。 ・ここで,マスには,「スタート」「ゴール」「1つ進む」「1つ戻る」「2つ進む」「2つ戻る」「スタートへ戻る」「何もしない」の条件があるとする。 ・さらに,ユーザは初期状態で「スタート」とし「ゴール」になったら終了とする。 ・乱数でサイコロ(1つ)の数字を出しすごろくを行い,片方がゴールしたら終了とする(ちょうどゴールにとまらなくてもよい)。なお,すごろくをプレイしている状況は表示すること。 ・あとはすごろくとして成り立っていればどのようにプログラミングしてもよい(他のクラスが必要な場合は追加してもよい)。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:VisualStudio [3.3] 言語:C++ [4] 期限: ([2008年10月16日
163 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 22:33:18 ] [1] 授業単元:C言語入門 [2] #include <stdio.h> int add(int x, int y) { return x+y; } int main() { int a, b, c; } printf("calc a + b\n"); printf("input a b\n"); scanf("%d%d", &a, &b); c = add(a,b); printf("result: %d + %d = %d\n", a, b, c); return 0; } void accum(int *x, int y) { *x = *x + y; } このポインタを使って上の関数addを用いずに同じ動作をするプログラムを作れ。 お願いします(__)
164 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 22:38:31 ] >163 問題は正確に
165 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 22:40:21 ] #include <stdio.h> void accum(int *x, int y) { *x = *x + y; } int main() { int a, b; printf("calc a + b\n"); printf("input a b\n"); scanf("%d %d", &a, &b); printf("result: %d + %d", a, b); >>163 accum(&a, b); printf(" = %d\n", a); return 0; }
166 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 23:12:03 ] すみません。 VC++をいじってるんですが、double型の値を画面に表示させると 「0.000000」といった感じで小数部が6桁表示されてしまいます。 この小数部の表示桁数を制限したいのですが、何か良い関数など があれば教えて下さい。 よろしくお願い致します。
167 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 23:16:43 ] printf("%5.2lf",12.34); ってやったらどうだろう
168 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 23:27:28 ] それは間違いだ いやc99ならいける というレスが続きそうな気がするので先に言っておこう
169 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 23:29:23 ] >>168 C99なら…それでもC99ならきっとなんとかしてくれる…
170 名前:お願いします [2008/10/08(水) 23:58:33 ] 【質問テンプレ】 [1] 授業単元: アルゴリズムデータ構造2 [2] 問題文(含コード&リンク): 52枚のトランプを5人に配るシミュレーション [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: コマンドプロンプト バージョンはすいません分からないです。 [3.3] 言語: C言語 [4] 期限: 10月13日(月)まで [5] その他の制限: 配列でswap関数を使って作ってもらいたいです。
171 名前:お願いします [2008/10/09(木) 00:16:55 ] >>170 アップローダの使い方がいまいち分からなかったので ソースを貼ります このプログラムを書き換えてください。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int i; char *card[]={"Club","Diamond","Heaart","Spade"}; char *numb[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; srand(time(NULL)); i=rand()%52; printf("%s%s\n",card[i/13],numb[i%13]); return 0; }
172 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 00:37:56 ] >>171 こんなんでおk? #include <stdio.h> #include <stdlib.h> #include <time.h> void swap(int*a,int*b){int c = *a;*a=*b;*b = c;} int main(void) { int i,n; char *card[]={"Club","Diamond","Heaart","Spade"}; char *numb[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; int cards[52]; for(i=0;i<52;++i) cards[i] = i; srand(time(NULL)); //カードをシャッフルする for(i=0;i<52;++i) swap(cards+i,cards+rand()%(52-i)+i); for(i=0;i<52;++i) printf("%cさん %s%s\n","ABCDE"[i%5],card[cards[i]/13],numb[cards[i]%13]); return 0; }
173 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 00:39:59 ] ぎゃあ表示がバグってる。 たぶん空白だけだと思うけど念のためにもう一度。 #include <stdio.h> #include <stdlib.h> #include <time.h> void swap(int*a,int*b){int c = *a;*a=*b;*b = c;} int main(void) { int i,n; char *card[]={"Club","Diamond","Heaart","Spade"}; char *numb[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; int cards[52]; for(i=0;i<52;++i) cards[i] = i; srand(time(NULL)); //カードをシャッフルする for(i=0;i<52;++i) swap(cards+i,cards+rand()%(52-i)+i); for(i=0;i<52;++i) printf("%cさん %s%s\n","ABCDE"[i%5],card[cards[i]/13],numb[cards[i]%13]); return 0; }
174 名前:デフォルトの名無しさん [2008/10/09(木) 04:00:50 ] 1から指定した数までを足し算で計算するプログラム教えてくれ。
175 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 04:06:52 ] #include <stdio.h> int main() { int a; scanf("%d", &a); printf("%d", a * (1 + a) / 2); return 0; }
176 名前:デフォルトの名無しさん [2008/10/09(木) 15:08:33 ] [1] 授業単元:ランダムウォークと配列 [2] 問題文(含コード&リンク): 左右に動く点がありそれが連続で右に動いた回数をカウントし出力 一連続は**回 二連続は++回 [3] 環境 [3.1] OS:WinXP [3.2] コンパイラ名とバージョン:Visual Basic 2005 [3.3] 言語: C++ [4] 期限: 無期限 よろしくお願いします
177 名前:176 [2008/10/09(木) 15:14:43 ] 失敬 開発環境はMicrosoft Visual Studio 2005です
178 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 17:20:26 ] >>176 #include <iostream> #include <cstdlib> int main() { int i, j, n, r1 = 0, r2 = 0, state = 0; std::cout << "繰り返し回数 = "; std::cin >> n; for (i = 0; i < n; i++) { j = std::rand() % 2; // 0で左、1で右 if (j == 1) // 右へ動いた switch (state) { case 0: // 左へ動いた直後か右へ二回動いた直後 r1++; state = 1; break; case 1:// 右へ一回動いた直後 r1--; r2++; state = 0; break; default: break; } else state = 0; } std::cout << "一連続は" << r1 << "回 " << "二連続は" << r2 << "回" << std::endl; }
179 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 17:21:39 ] >>176 情報が足りなさすぎるということに気づけないレベルなんだなあ。 単位落としちゃえよ。
180 名前:デフォルトの名無しさん [2008/10/09(木) 19:56:21 ] >>179
181 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 22:31:09 ] [1] 授業単元: C言語 [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7765.txt TCPサーバー kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7766.txt TCPクライアント kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7766.txt [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン:Visual stdio2005 [3.3] 言語:C [4] 期限:10月10日(金)まで [5] その他の制限:問題文に記述 よろしくお願いいたします
182 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 22:33:32 ] すみません TCPクライアント kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7767.txt でした
183 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 23:33:58 ] あと30分で終わらせとか(><
184 名前:デフォルトの名無しさん [2008/10/10(金) 00:10:16 ] [1] 授業単元: C++ [2] 問題文: ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7768.txt [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン:Visual stdio2005 [3.3] 言語:C [4] 期限:10月11日(土)まで [5] 問題文が英語ですいません。期限が短いのですがお願い致します。
185 名前:デフォルトの名無しさん [2008/10/10(金) 00:26:53 ] [1] 授業単元:C言語 [2] 問題文:a(n+1)=3a(n)+4b(n) b(n+1)=2a(n)+3b(n) の漸化式で1.4142135を算出するプログラム [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 10月10日 朝7時まで [5] その他の制限:特になし 手計算だと5回目に算出できましたが、プログラムに仕方がわかりません;
186 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 00:32:14 ] >>185 つ数学板 Cの課題とは言えない
187 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 00:33:31 ] >>185 せめてnはいくつから始めるのかだけでも言え それがないと漸化式が解けん
188 名前:デフォルトの名無しさん [2008/10/10(金) 00:36:49 ] >>186 数学板行ったらCにいけゆわれました; >>187 すみません、nは0からです;
189 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 00:44:22 ] >>184 #include <iostream> using namespace std; int main() { for (;;) { string name; int credit_standing, amount_owed, minimum_payment; cin >> name >> credit_standing >> amount_owed; if (cin.eof()) break; if (credit_standing > 6) minimum_payment = (amount_owed <= 20) ? amount_owed : (amount_owed <= 100) ? 10 : 0.1 * amount_owed; else minimum_payment = amount_owed; cout << name << " with credit standing " << credit_standing << " must pay " << minimum_payment << endl; } return 0; }
190 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 00:58:56 ] >>185 a(0)とb(0)の初期値は?
191 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 00:59:43 ] >>184 なんだCだったか #include <stdio.h> int main() { char name[32]; int credit_standing, amount_owed, minimum_payment; while (scanf("%31s %d %d", name, &credit_standing, &amount_owed) == 3) { if (credit_standing > 6) minimum_payment = (amount_owed <= 20) ? amount_owed : (amount_owed <= 100) ? 10 : 0.1 * amount_owed; else minimum_payment = amount_owed; printf("%s with credit standing %d must pay %d\n", name, credit_standing, minimum_payment); } return 0; }
192 名前:デフォルトの名無しさん [2008/10/10(金) 01:06:07 ] >>190 a(0)=7 b(0)=5 です。
193 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 01:11:24 ] >>192 #include <stdio.h> double fa(double a_n, double b_n) { return 3 * a_n + 4 * b_n; } double fb(double a_n, double b_n) { return 2 * a_n + 3 * b_n; } int main() { double an = 7, bn = 5; double tmp; int i; for (i = 0; i < 10; ++i) { tmp = fa(an, bn); bn = fb(an, bn); an = tmp; } printf("%.10f\n", an / bn); return 0; }
194 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 01:21:24 ] >>193 ありがとうございます!!助かりました!!
195 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 01:21:40 ] >>185 素直に再帰したいけどこれじゃダメなのかな #include <stdio.h> int a(int); int b(int); int a(int n) { if (n == 0) return 7; else return 3 * a(n-1) + 4 * b(n-1); } int b(int n) { if (n == 0) return 5; else return 2 * a(n-1) + 3 * b(n-1); } int main() { printf("%.10lf\n", (double)a(10) / b(10)); return 0; }
196 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 01:36:07 ] >>195 いえいえ全然ダメじゃないです!本当にありがとうございます!
197 名前:デフォルトの名無しさん [2008/10/10(金) 01:39:40 ] >>189 ありがとうございました。 ちなみに各customerのコードはどのように入力すればいいのですか? 初心者ですいません。 >>191 すみません、言語はC++でした。 書き間違えてしまいました。 お手数おかけしました。
198 名前:181 mailto:sage [2008/10/10(金) 01:52:36 ] >>183 すいません言葉足らずでした 改めて貼り直します [1] 授業単元: C言語 [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7765.txt TCPサーバー kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7766.txt TCPクライアント kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7767.txt [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン:Visual stdio2005 [3.3] 言語:C [4] 期限:10月10日(金)13:00まで [5] その他の制限:問題文に記述 引き続きよろしくお願いいたします
199 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 06:56:37 ] >>198 TCPサーバー:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7769.txt TCPクライアント:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7770.txt
200 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 12:03:51 ] >>199 ありがとうございました
201 名前:デフォルトの名無しさん [2008/10/10(金) 12:16:32 ] なぜうp先は関西2ちゃんねらーなんですか
202 名前:デフォルトの名無しさん [2008/10/10(金) 15:52:19 ] [1] 授業単元: c言語 [2] 問題文(含コード&リンク): ペイントソフトを作る [3] 環境 [3.1] OS: windowsXP [3.2] コンパイラ名とバージョン: Visual studio .NET 2003 [3.3] 言語: c,c++ [4] 期限: 2週間後の火曜まで [5] その他の制限: MFCを使用しない 線の描画などはできましたが、ペンの太さや色の変更、 操作のやり直しなどが分かりません どなたかよろしくお願いします
203 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 16:39:02 ] >>202 単線だけでいいんじゃないの 機能つけるときりがないよ アンドゥとか特に無理
204 名前:デフォルトの名無しさん [2008/10/10(金) 17:14:13 ] >>203 返事ありがとうございます やはり、アンドゥ機能などは難しいのですかね? 今までc言語はやった事があったのですが それに比べるとVC++は色々ややこし過ぎて困っています。 画面を左右に分けて、描画とパレットのように分けて作ろうと思っているのですが 雛形みたいなのはあるのでしょうか?
205 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 19:34:20 ] 1] 授業単元:C++ [2] 問題文:ファイルから波形を読み込み、FFTした結果をテキスト出力する プログラムを作成せよ。 波形のデータは以下のようなものです。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7771.txt [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual Studio 2005 [3.3] 言語:C++ [4] 期限: [無制限] [5] その他の制限:まだCの勉強が浅く、色々と検索してみましたがどうもバタフライ演算の やり方が難しく分かりません。。何か説明不足があれば聞いてください。 FFTで詰まってしまい困っています。どうか、よろしくお願いしますm(_ _)m
206 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 19:35:12 ] >>204 宿題できてんじゃん。 色・ふとさ固定、undoできないなどの機能制限がたくさんあるが、それは立派なペイントソフトだよ。 さらに機能追加をしたいのであれば必要に応じてデバイスコンテキストに関する質問その他を やってけば?宿題スレじゃなく。
207 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 01:02:05 ] どなたか>>100 お願いできませんか
208 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 02:44:59 ] >>207 鬱になったので、途中から手を抜いてしまった。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7772.zip PerlでもRubyでも好きなの使った方がラクダと思うけどキリンか。
209 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 02:57:37 ] >>204 汚いけど、これじゃだめ?? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7773.zip
210 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 02:59:33 ] >>204 じゃなくて>>207 でした(´・ω・`)
211 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 08:13:31 ] >>202 線じゃなくて、点を打つようにすると太さ変えるのも楽になる お絵かきチャットでは、線と線を結んでる場合が多いけど ローカルで使えるペイントソフトはたいてい点を打って点を繋いでると思われる 点をつなげるのは、結構めんどい アンドゥは、やり方がいくつかある 画像として管理するか 数値データとして管理するか、かな。 突貫でいいなら画像として管理するのを作ったほうが楽かもしれない どちらが得意かによる
212 名前: ◆ZnBI2EKkq. mailto:sage [2008/10/11(土) 12:00:32 ] [1] 授業単元:情報処理A [2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7774.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Cygwin gcc 3.4.4 [3.3] 言語:C [4] 期限:2008年10月17日 16:00まで [5] その他の制限:scanf関数は禁止、再帰呼び出しを用いること、エラー処理を入れること 今もやっているのですが、とても期限までに終わる気がしません。。。 誰か助けてください。
213 名前:デフォルトの名無しさん [2008/10/11(土) 15:35:33 ] [1] 授業単元:c++ builder [2] 加算平均を求めよ [3] 環境 [3.1] OS:windows xp [3.2] コンパイラ名とバージョン: c++ builder5 [3.3] 言語: どちらでも可 [4] 期限:2008年10月13日まで テキスト1には テキスト2には テキスト3には 8 3 4 5 4 7 7 9 9 8 8 5 9 3 4 9 8 9 という形で与えられており、これをOpendialogで読み込んで加算平均しMemo1に 5 5.33333 8.33333 7 5.33333 8.66666 のように計算したものを出したいのですがどのようにすればよいでしょうか? 全然わからなくて何度か自分なりにつくっているのですが、うまくいきません。 どなたか助けてもらえませんか 読み込みはなんとかできそうですが加算平均の配列の計算のプログラムの作り方が どうしてもわかりません。 よろしくお願いします。
214 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 16:00:03 ] >>213 Opendialog っていうのが分からなかった #include<stdio.h> #include<stdlib.h> #include<math.h> #define NUMBER_OF_FILES 3 int main(void){ FILE *fp_in[NUMBER_OF_FILES], *fp_out; char *filename_in[NUMBER_OF_FILES]={"テキスト1", "テキスト2", "テキスト3"}, *filename_out="Memo1"; double value[NUMBER_OF_FILES], sum; int i; for(i=0;i<NUMBER_OF_FILES;i++){ if((fp_in[i]=fopen(filename_in[i], "r"))==NULL){ fprintf(stderr, "\nError: %s cannot open.\n", filename_in[i]); exit(1); } } if((fp_out=fopen(filename_out, "w"))==NULL){ fprintf(stderr, "\nError: %s cannot open.\n", filename_out); exit(2); } while(1){ for(i=0,sum=0.0;i<NUMBER_OF_FILES;i++){ if(fscanf(fp_in[i], "%lf", &value[i])!=1) break; sum+=value[i]; } if(i<NUMBER_OF_FILES) break; fprintf(fp_out, "%g\n", floor(sum/NUMBER_OF_FILES*100000)/100000); } for(i=0;i<NUMBER_OF_FILES;i++) fclose(fp_in[i]); fclose(fp_out); return 0; }
215 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 16:01:28 ] >>212 マージャン知らないと不利な課題だな。
216 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 16:07:36 ] >>212 www5f.biglobe.ne.jp/~kenmo/program/majang/yaku/yaku.html 参考になるかも?
217 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 16:49:40 ] >>207 >>100 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7776.zip 一応動くようにしてみた。コマンドライン引数は、すべて実装しているわけではない。 後は好きなようにしてくれ。
218 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 17:14:43 ] >>207 >>100 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7777.zip >>217 の細かい修正とエラー処理追加しておいた。荒れそうなので、これくらいにしておく(鬱)。
219 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 20:58:59 ] >>218 ありがとうございます。 >>209 ファイル入力、標準出力はうまくいきました。 標準入出力、ファイル入出力を成功させるにはどうしたらいいでしょうか。
220 名前:デフォルトの名無しさん [2008/10/11(土) 21:08:15 ] [1] 授業単元: 測量学 [2] 問題文:"度"形式から"度分秒"形式への変換 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: コマンドプロンプト バージョンはすいません分からないです。 [3.3] 言語: C言語 [4] 期限: 10月13日(月)まで [5] その他の制限: 簡単な関数のみでお願いします。 (例) 35.2361 → 35°14′9.96″ 変換式は、まず 35.2361の小数点部分の0.2361×60=14.166 この結果の整数部分の14が分になります。 そして、14.166の小数点部分の0.166×60=9.96 この結果の9.96が秒になります。 初期値35.2361も出力値35°14′9.96″も文字列です。 初期値が35.2361ではなく、何が初期値でも通用するようにしてください。 また、初期値の小数点以下が2361と4桁と決まっているわけでもありません。
221 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 21:46:26 ] >>220 pc11.2ch.net/test/read.cgi/tech/1221144557/312-315
222 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 22:01:49 ] >>220 #include<stdio.h> #include<math.h> void convert(char *dms, const char *deg) { double x, d, m; sscanf(deg, "%lf", &x); x = fabs(modf(x, &d) * 60); x = modf(x, &m) * 60; sprintf(dms, "%g°%g′%g″", d, m, x); } int main() { static const char deg[] = "-35.2361"; char dms[100]; convert(dms, deg); printf("%s\n", dms); return 0; }
223 名前:213 [2008/10/11(土) 22:03:42 ] >>214 即レスありがとうございます。大変感謝しています;; Opendialogはc++builder5のダイアログでファイルを開くというコマンドを示しています わざわざプログラムを書いていただいたのですが、これをc++builderに 置き換えていくことができませんでした。すいません;; 自分でも今まで書いていたのですが、Memo1には-2と一行書き出されるだけでした; 多分読み込んだ配列の計算としての基本的な計算とプログラムが間違っていると思うのですが、 自分ではどこが間違っているのかわかりませんでした。。 どなたかよければ教えていただけないでしょうか。よろしくお願いします><
224 名前:213 [2008/10/11(土) 22:08:40 ] void __fastcall TForm1::Button1Click(TObject *Sender) ファイルを開いてテキスト1を読み込む { OpenDialog1->Execute(); Fname1 = OpenDialog1->FileName; Edit1->Text = Fname1; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) テキスト2を読み込む { OpenDialog1->Execute(); Fname2 = OpenDialog1->FileName; Edit2->Text = Fname2; }
225 名前:213 [2008/10/11(土) 22:09:10 ] void __fastcall TForm1::Button3Click(TObject *Sender) テキスト3を読み込む { OpenDialog1->Execute(); Fname3 = OpenDialog1->FileName; Edit3->Text = Fname3; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) 3つのテキストを加算平均してMemo1に書き出す { AnsiString kasan; char Fname1[5],Fname2[5],Fname3[5]; for(m=0;m<=5;m++); { kasan = (Fname1[m] + Fname2[m] + Fname3[m])/3; } Memo1->Lines->Add(kasan);
226 名前:213 mailto:sage [2008/10/11(土) 22:10:31 ] 長文失礼しました。。 こんな感じです。
227 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 03:30:31 ] #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <Dialogs.hpp> #include <fstream> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE 管理のコンポーネント TEdit *Edit1; TEdit *Edit2; TEdit *Edit3; TButton *Button1; TButton *Button2; TButton *Button3; TButton *Button4; TOpenDialog *OpenDialog1; TMemo *Memo1; void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); void __fastcall Button3Click(TObject *Sender); void __fastcall Button4Click(TObject *Sender); private: // ユーザー宣言 AnsiString Fname1; AnsiString Fname2; AnsiString Fname3;
228 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 03:31:35 ] public: // ユーザー宣言 __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif これがUnit1.hね それからUnit1.cpp #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { OpenDialog1->Execute(); Fname1 = OpenDialog1->FileName; Edit1->Text = Fname1; }
229 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 03:32:24 ] //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { OpenDialog1->Execute(); Fname2 = OpenDialog1->FileName; Edit2->Text = Fname2; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { OpenDialog1->Execute(); Fname3 = OpenDialog1->FileName; Edit3->Text = Fname3; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) { std::ifstream ifs[3]; ifs[0].open(Fname1.c_str()); ifs[1].open(Fname2.c_str()); ifs[2].open(Fname3.c_str()); for (int i = 0; i < 6; i++) { double sum, t1, t2, t3; ifs[0] >> t1; ifs[1] >> t2; ifs[2] >> t3; sum = (t1 + t2 + t3) / 3; Memo1->Lines->Add(AnsiString(sum)); } }
230 名前:213 mailto:sage [2008/10/12(日) 03:59:24 ] >>227 >>228 >>229 ありがとうございました! おかげで正しく算出することができました><
231 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 04:15:13 ] [1] 授業単元:アルゴリズム [2] 引数nに対して、1/nの小数表示を逆配列と動的配列を用いた形でプログラムせよ kk.kake.info.waseda.ac.jp/ads08/Cbasics/one-n-th.html [3] 環境 [3.1] OS: Windows [3.2] cygwin gcc 3.4 [3.3] 言語: C [4] 期限: [2008年10月12日00:00まで] [5] 特になし 全然わかりません……どなたか助けて頂けると幸いです……
232 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 13:29:10 ] >>231 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7778.c
233 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 14:05:25 ] >>232 動きました! あぁ…なんといっていいやら……ありがとうございます!! これからプログラムの挙動について考えてみたいと思います
234 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 20:21:40 ] てs
235 名前:デフォルトの名無しさん [2008/10/12(日) 21:59:38 ] [1] 授業単元:アルゴリズムとデータ構造 [2] 問題文(含コード&リンク):任意の長さの文字列(英字のみ)データをファイルから読み込み(ファイル名をキーボードから入力して読み込ませる)、辞書順に並べ替えて最終結果のみを表示するプログラムを作成せよ。 ただし、データは改行で区切られており、文字列の最大長を64文字、データの最大個数を1000個(1000行)とする。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc (バージョン不明です) [3.3] 言語: C言語 [4] 期限: 2008年10月14日23:59まで [5] その他の制限: バブルソートの基本らしいのですが…str〜、getsなど使用する関数や、とりあえず、配列とポインタを使わないといけないんだろう、など断片的なものにしか自信が、持てずプログラムを組んでみたものの実行できません…orz 助けてください…。
236 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 22:05:11 ] >>235 問題文には含んでないけど 結局バブルソートは自分で書かなきゃだめなのか? 平たくいえばqsortとstrcmp使っていいか?
237 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 22:15:10 ] >>236 qsortという関数はまだ習っていないのでなるべく控えたいのですが、strcmpは自分がプログラムを組んでみた時にも使用しましたので使っていただいて大丈夫です。 早速ありがとうございます。
238 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 22:31:36 ] >>235 #include<stdio.h> #include<string.h> #define WORD_NUM_MAX 1000 #define WORD_LEN_MAX 64 int main(void){ char word[WORD_NUM_MAX][WORD_LEN_MAX+1+1], tmp[WORD_LEN_MAX+1], *p; char filename[256]; int i, j, word_num; FILE *fp; printf("Input filename : "); scanf("%255[^\n]", filename); if((fp=fopen(filename, "r"))==NULL) return 1; for(word_num=0;word_num<WORD_NUM_MAX;word_num++){ if(fgets(word[word_num], sizeof(word[0]), fp)==NULL) break; if((p=strchr(word[word_num], '\n'))!=NULL) *p='\0'; } fclose(fp); for(i=0;i<word_num;i++){ for(j=0;j+1<word_num-i;j++){ if(strcmp(word[j], word[j+1])>0){ strcpy(tmp, word[j]); strcpy(word[j], word[j+1]); strcpy(word[j+1], tmp); } } } for(i=0;i<word_num;i++) puts(word[i]); return 0; }
239 名前:デフォルトの名無しさん [2008/10/12(日) 23:21:54 ] [1] 授業単元:c++ builder [2] 3科目4人分の得点と科目ごと、個人ごとの平均点を配列を使って作れって [3] 環境 [3.1] OS:windows xp [3.2] コンパイラ名とバージョン: c++ builder5 [3.3] 言語: どちらでも可 [4] 期限:2008年10月13日まで
240 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 23:57:56 ] >>239 とりあえずgccでは動いた。 #include <stdio.h> int main(int argc, char *argv[]) { int score[4][3] = {{90,73,82},{60,50,55},{71,59,80},{95,88,80}}; int i,j; double personAvg[4]; double classAvg[3]; printf("人別平均\n"); for(i=0; i<4; i++) { for(j=0; j<3; j++) { personAvg[i] += score[i][j]; } personAvg[i] /= 3; printf("%f\n", personAvg[i]); } printf("科目別平均\n"); for(j=0; j<3; j++) { for(i=0; i<4; i++) { classAvg[j] += score[i][j]; } classAvg[j] /= 4; printf("%f\n", classAvg[j]); } }
241 名前:デフォルトの名無しさん [2008/10/13(月) 00:07:50 ] >240 ありがとうございました・・・ 世の中すてたもんじゃないっておもいました・・ 本当に困ってたので・・・
242 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:17:33 ] >>241 妙な授業単元に問題文 ついでに抜けてる部分を修正できると思えない人間 言葉からにじみ出てくる、「俺は悪くないよ」オーラ 世の中ろくなもんじゃないよ
243 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:28:25 ] それは本当の優しさなのだろうか。
244 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:53:39 ] 下記の問題をやっていただける方いませんか?よろしくお願いします [1] 情報処理 [2] ある自然数nがある。 このnを和に分解するすべての場合を列挙しなさい。 なお、以下の例のように順列でも組み合わせでもかまわない。 例 n = 4 1 1 1 1 1 1 2 1 2 1 1 3 2 1 1 2 2 3 1 n = 4 1 1 1 1 1 1 2 1 3 2 2 3 1 [3] [3.1] Linux [3.2] gcc4.0 [3.3] C言語 [4] 10月15日23:59 [5] 再帰について習いました
245 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 01:18:06 ] >>244 #include<stdio.h> #define N_MAX 100 int g_result[N_MAX]; void bar(int result_num, int n){ int i; if(n<=0){ for(i=0;i<result_num;i++) printf(" %d", g_result[i]); printf("\n"); return; } for(i=1;i<=n;i++){ g_result[result_num]=i; bar(result_num+1, n-i); } } void foo(int n){ int i; if(n>N_MAX) return; for(i=1;i<=n-1;i++){ g_result[0]=i; bar(1, n-i); } } int main(void){ int n=4; printf("n = %d\n", n); foo(n); return 0; }
246 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 02:55:57 ] じゃあ僕は組み合わせで。 #include<stdio.h> #include<string.h> int partition(int n,int m,char *exp); int main(void){ int i,n,c; do{ printf("nを入力してください。 n="); scanf("%d",&n); c=0; for(i=n;i>0;i--) c += partition(n,i,""); printf("Total:%d\n",c); }while(n != 0); return 0; } int partition(int n,int m,char *exp){ int i,c=0; char ex[100]=""; if(n==m){ printf("%s%d\n",exp,m); return 1; } if(m==0) return 0; if(n>m){ sprintf(ex,"%s%d+",exp,m); for(i=m;i>0;i--) c += partition(n-m,i,ex); return c; } return 0; }
247 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 02:57:17 ] >>245 どうもありがとうございました。
248 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 02:58:05 ] >>246 こちらもどうもありがとうございました。 >>245 ,246 ソースを理解していきたいです。
249 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 11:00:03 ] どなたか >>205 お願いできませんでしょうか・・
250 名前:デフォルトの名無しさん [2008/10/13(月) 12:54:17 ] [1] 授業単元: C [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7781.txt [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VB2008 [3.3] 言語: C++ [4] 期限: 10/14まで [5] その他の制限: 特になし。 どなたか、お願いします。
251 名前:デフォルトの名無しさん [2008/10/13(月) 14:09:18 ] >>249 ネットでぱくれ
252 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 14:34:26 ] 2次方程式ax^2+bx+cの根を計算するプログラムをかきなさい。 という問題です。 //二次方程式の根を計算するプログラム #include <stdio.h> void main () { double a, b, c, d; printf("3つの数字を入力してください"); scanf("%d %d %d", &a ,&b ,&c); d = b*b-4*a*c; printf("二次方程式の根は%d\n",d); } のように書いたのですがすべて答えが同じになってしまいます お願いします。
253 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 14:36:35 ] %d →%f
254 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 14:38:04 ] >>252 > 2次方程式ax^2+bx+cの根を計算するプログラムをかきなさい。 > > という問題です。 > //二次方程式の根を計算するプログラム > #include <stdio.h> > void main () { > double a, b, c, d; > printf("3つの数字を入力してください"); > scanf("%d %d %d", &a ,&b ,&c); > d = b*b-4*a*c; > printf("二次方程式の根は%d\n",d); > } > > のように書いたのですがすべて答えが同じになってしまいます > お願いします。 > scanf("%d %d %d", &a ,&b ,&c); scanf("%lf %lf %lf", &a ,&b ,&c); > printf("二次方程式の根は%d\n",d); printf("二次方程式の根は%f\n",d);
255 名前:235 [2008/10/13(月) 16:30:13 ] >>238 お礼が遅れてすいません、ありがとうございます。 …しかしながら…自分の説明不足のせいで大変申し訳ないのですが、 問題文中の「辞書順」=「大文字小文字も区別する」ということなのです…。 つまり、 A<a<B<b<C<c<D<d<・・・・・・・・・・・・・<X<x<Y<y<Z<z このように並べ替えたいのです。 >>238 さんのプログラムを参考に自分でももう少し考えてみますが、あまり自信がないので手助けしていただけたら幸いです…。 大変申し訳ないです。
256 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:26:45 ] >>253 >>254 ありがとうございます。 どうやら自分が勘違いしてたようで根は二次方程式の解そのものみたいです。 少し自分でも書きなおしてみましたが教科書には a=0の場合は1次方程式,b=0かどうかをチェックする必要がある。 二次方程式は判別式の符号をチェックする必要があるとかいてありそれがよくわかりません。 よろしくおねがいします。 #include <stdio.h> #include <math.h> void main () { double a, b, c, d; printf("3つの数字を入力してください"); scanf("%lf %lf %lf", &a ,&b ,&c); d = sqrt(b*b-4*a*c); printf("二次方程式の根は%lf,%lf\n",-b+d/2*a,-b+d/2*a); }
257 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:38:24 ] >>256 判別式が負だったらどうすればいいの 解なしと表示するのか虚数まで表示するのか
258 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:59:25 ] >>257 虚数表示でいいと思います。
259 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:37:42 ] >>235 >>255 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7782.c main()はあまりいじってない。もっとクールな比較関数を誰か頼む。
260 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:49:40 ] それなんてstrcasecmp
261 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:51:29 ] こうするだけでよくね? #include<stdio.h> #include<string.h> #define WORD_NUM_MAX 1000 #define WORD_LEN_MAX 64 int main(void){ char word[WORD_NUM_MAX][WORD_LEN_MAX+1+1], tmp[WORD_LEN_MAX+1], *p; char filename[256]; int i, j, word_num; int icmp; FILE *fp; printf("Input filename : "); scanf("%255[^\n]", filename); if((fp=fopen(filename, "r"))==NULL) return 1; for(word_num=0;word_num<WORD_NUM_MAX;word_num++){ if(fgets(word[word_num], sizeof(word[0]), fp)==NULL) break; if((p=strchr(word[word_num], '\n'))!=NULL) *p='\0'; } fclose(fp); for(i=0;i<word_num;i++){ for(j=0;j+1<word_num-i;j++){ if((icmp = stricmp(word[j], word[j+1])) == 0 && strcmp(word[j], word[j+1])>0 || icmp >0){ strcpy(tmp, word[j]); strcpy(word[j], word[j+1]); strcpy(word[j+1], tmp); } } } for(i=0;i<word_num;i++) puts(word[i]); return 0; }
262 名前:259 mailto:sage [2008/10/13(月) 20:19:53 ] >>260 >>261 strcasecmp()もstricmp()も A<a<B<b<C<c<D<d<・・・・・・・・・・・・・<X<x<Y<y<Z<zの順にならないと思うのだが。 strcasecmp()は、実際にthe The The the the みたいになってうまくいかなかった。 stricmp()も、比較前に文字列を小文字にするから、同じだろう。
263 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 20:40:25 ] 小文字で比較して一緒だったら、大文字も考慮して比較すればいいと思ったけど、だめなのかなぁ。
264 名前:259 mailto:sage [2008/10/13(月) 21:07:41 ] if ( ((icmp = stricmp(word[j], word[j+1])) == 0 && strcmp(word[j], word[j+1])>0) || icmp >0 ) たしかに、論理的にもこれでいけますね。 stricmp()なかったので、作ってやってみました。
265 名前:デフォルトの名無しさん [2008/10/13(月) 21:56:11 ] >>250 の、すごろくをどなたかお願いします。
266 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 21:57:22 ] >>261 The book // 1番目 the apple // 3番目 tHe earth // 2番目 これを並べ替えると the apple // 3番目 The book // 1番目 tHe earth // 2番目 こうなったよ
267 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:17:21 ] >>258 #include <stdio.h> #include <math.h> int main() { double a, b, c, d, x; printf("a^2 * x + b * x + c = 0となるa, b, cを入力してください\n"); scanf("%lf %lf %lf", &a ,&b, &c); if (a == 0) { puts("2次方程式ではありません"); return 1; } b /= a; if (c == 0) { printf("x = %g, 0\n", -b); } else { c /= a; b /= 2; /* x^2 + 2b'x + c = 0の形へ */ d = b * b - c; /* 判別式 */ if (d > 0) { if (b > 0) { x = -b - sqrt(d); } else { x = -b + sqrt(d); } printf("x = %g, %g\n", x, c / x); } else if (d < 0) { printf("x = %g ± %gi\n", -b, sqrt(-d)); } else { printf("x = %g\n", -b); } } return 0; }
268 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 22:18:01 ] C言語による最新アルゴリズム事典には、解の公式をそのまま使うと、 |b| ≒ √(b^2 - 4ac)のとき桁落ちを起こすから、桁落ちしないほうだけ公式で求めて、 残りは解と係数の関係(解α, βとしてαβ = c / a)で求めろって書いてあるからそうした。
269 名前:259 mailto:sage [2008/10/13(月) 22:56:37 ] >>266 のおっしゃる通りでした。 一瞬、そのテストケースもあったのか、と思ったが、 >>[2] 問題文(含コード&リンク):任意の長さの文字列(英字のみ)データ(>>235 ) だから、スペースが入る文字列はテストケースとしては、条件外になる。 しかし、指摘通り今回の問題では、>>261 では、スペースをのぞいてひとつの文字列に見せかけて食わせたとき、大文字優先の原則に従っていなくなりますね。 私は、単語だけと思っていたけど、英字だけの文字列だったのね。 これ以上出ると荒れそうなので、私が出るのは止めておくが、誰か>>259 よりクールな比較関数頼む。
270 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 23:12:12 ] >>250 >>265 ほい、 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7783.txt でも、VB2008じゃないんで… VC6なんて、iostreamとかの .h とかは自分の環境に合わせてくれ それと、ゴール出来ない双六が出来る可能性もあると言えばある
271 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 23:44:10 ] てか、strcmpだけで正しく辞書順になるんじゃね?頭こんがらがってきた\(^o^)/
272 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 23:55:22 ] >>271 いやasciiコードだとして英字が A-Zがならんでその次にa-zになるじゃん
273 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 00:22:14 ] でも、strcmpの戻り値は辞書式で比較した値でしょ?? msdn.microsoft.com/ja-jp/library/e0z9k731 (VS.80).aspx 難しく考えなくていいんじゃない??
274 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 00:47:53 ] Order by case insensitive dictionary order,dictionary order. Are you OK?
275 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 00:58:30 ] >>235 >>238 にこれを追加して strcmp を mystrcmp に変更すれば希望通りになる筈 int mystrcmp(const unsigned char *a, const unsigned char *b){ static int table[256], is_table_initialized=0; int i; if(!is_table_initialized){ for(i=0;i<256;i++) table[i]=i*2; for(i=0;i<26;i++) table['a'+i]=table['A'+i]+1; is_table_initialized=1; } for(;*a!='\0';a++,b++) if(*a!=*b) break; return table[*a]-table[*b]; }
276 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 02:04:40 ] >>273 「辞書式順序」 (dictionary order)というのは英和辞典なんかの並び順のことじゃないぞ。 きちんとした定義を持った数学用語。 ja.wikipedia.org/wiki/%E8%BE%9E%E6%9B%B8%E5%BC%8F%E9%A0%86%E5%BA%8F 1文字目が同じなら2文字目の大小で比較し、 2文字目も同じなら3文字目の大小で比較し、……という順序付けのこと。 >>275 なんかももちろん辞書式順序。 strcmpは各文字の大小比較を単純に文字コードの値で比較しており、 それだと>>273 の言うとおりなので、>>255 の要求には沿わないわけ。
277 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 13:19:06 ] どなたか>>162 の問題をお願いできないでしょうか?
278 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 13:23:04 ] >>277 このスレを「すごろく」で検索
279 名前:デフォルトの名無しさん [2008/10/14(火) 15:00:10 ] [1] 授業単元:プログラミング言語 [2] 問題文:直角三角形の直行する2辺の長さ、a、bともに正の整数(n≧0)が与えられた時、斜辺の長さcをプリントするプログラムを書き、数例に対して実行せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2008年10月15日まで [5] その他の制限:floatを使えと指示されました。 習い始めたばかりでまったくと言っていいほどわかりません。呆れるほど簡単な問題かもしれませんが、よろしくお願いします!
280 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 15:08:38 ] >>279 俺にも出来そうな問題がきた #include <stdio.h> #include <math.h> int main(void) { int a, b; float c; printf("a = "); scanf("%d", &a); printf("b = "); scanf("%d", &b); c = (float)sqrt(a * a + b * b); printf("\n答え %f\n", c); return 0; } >数例に対して実行せよ。 の意味がわからないので入力値で計算させた
281 名前:デフォルトの名無しさん [2008/10/14(火) 15:22:09 ] >>280 ありがとうございます! もう一つお聞きしてもよろしいですか? 書いていただいたプログラムをこのままコピーしてコンパイルして実行したら未定義のシンボルsqrtとか重大なエラーとか出てきてしまったんですが、 この場合はどうすればよろしいのでしょうか?
282 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 15:23:58 ] >>281 gcc -lm hoge.c かな
283 名前:デフォルトの名無しさん [2008/10/14(火) 15:29:34 ] >>282 できました!!本当にありがとうございます!!! こんな見ず知らずの勉強不足クソ野郎にもかかわらず、ご親切に教えていただきまして大変感謝しております。 ありがとうございました!
284 名前:デフォルトの名無しさん [2008/10/14(火) 15:39:34 ] sqrtくらい実装した方がいい
285 名前:デフォルトの名無しさん [2008/10/14(火) 15:47:42 ] たとえばroot(n,c) cのn乗根の作り方 x=n√cとおくとx^n=cとなる。f(x)=x^n-cという関数の根を求めればいい 一般に、f(x)の根はニュートン法で計算できる。 点aでfに接する直線の方程式は、y = f'(a)(x-a) + f(a) これがy=0としてxについてとくと、x = a + f(a)/f'(a) この値を新たにaとしておいて、同様の操作をすると収束すれば解が求まる。
286 名前:デフォルトの名無しさん [2008/10/14(火) 15:56:34 ] コンパイルは通してないがおおかたこんな通りだろう float pow(int n, float c){ int k; float a=1; for( k=0; k<n; k++)a*=c; return a; } float root(int n, float c){ int k; float a=c; for( k=0; k<50; k++) a += (pow(n,a)-c)/(n*pow(n-1,a)); return a; }
287 名前:デフォルトの名無しさん [2008/10/14(火) 16:03:24 ] #include <stdio.h> float pow(int n, float c){ int k; float a=1; for( k=0; k<n; k++)a*=c; return a; } float root(int n, float c){ int k; float a=c; for( k=0; k<50; k++) a -= (pow(n,a)-c)/(n*pow(n-1,a)); return a; } float sqr(float c){ return root(2,c); } int main(){ printf("√2 =%f\n",sqr(2)); printf("√3 =%f\n",sqr(3)); }
288 名前:デフォルトの名無しさん [2008/10/14(火) 16:06:45 ] 微分、積分して関数で返すライブラリってある?
289 名前:デフォルトの名無しさん [2008/10/14(火) 16:44:57 ] こっちの方が速い #include <stdio.h> #define GOSA 0.00001 double pow(int n, double c){ int k; double a=1; for( k=0; k<n; k++) a*=c; return a; } float root(int n, float c){ double x=c,y,z; while(1){ y=pow(n-1,x); z=x*y; if(z>c-GOSA && z<c+GOSA)break; x -= (z-c)/(n*y); printf("root( %d , %.1f )の計算経過 %f\n",n,c,x); } return x; } float sqr(float c){ return root(2,c); } int main(){ printf("√2 =%f\n\n",sqr(2)); printf("√3 =%f\n\n",sqr(3)); }
290 名前:デフォルトの名無しさん [2008/10/14(火) 16:52:47 ] これでいいか #define GOSA 0.00001 float sqr(float c){ double x=c,y; while(1){ y=x*x; if(y>c-GOSA)if(y<c+GOSA)break; x -= (y-c)/(2*x); printf("sqr( %.1f )の計算経過 %f\n",c,x); } return x; }
291 名前:デフォルトの名無しさん [2008/10/14(火) 17:04:40 ] みなさまに質問があります。若干スレチになるかもしれんが、一つ力を貸してくれないだろうか…
292 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 17:09:06 ] 質問ならもっとふさわしいスレがあるだろう ここは宿題をやってもらうスレ
293 名前:デフォルトの名無しさん [2008/10/14(火) 17:09:39 ] 標準ライブラリ速いな どうやったら速度を抜けるだろうか? #include <stdio.h> #include <math.h> #include <time.h> #define GOSA 0.0001 float sqr(float c){ double x=c,y; while(1){ y=x*x; if(y>c-GOSA)if(y<c+GOSA)break; x -= (y-c)/(2*x);} return x; } int main(){ double sum; int n,cl; sum=0; cl=clock(); for(n=0;n<1000000;n++)sum+=sqr(1000); cl=clock()-cl; printf("time=%d sum=%f\n",cl,sum); sum=0; cl=clock(); for(n=0;n<1000000;n++)sum+=sqrt(1000); cl=clock()-cl; printf("time=%d sum=%f\n",cl,sum); }
294 名前:デフォルトの名無しさん [2008/10/14(火) 17:09:52 ] >>292 そうだな。すまん。
295 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 19:18:31 ] ソースみればいいだろ標準の
296 名前:デフォルトの名無しさん [2008/10/14(火) 19:55:39 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7784.txt [3] 環境 [3.1] OS: Windows [3.2] Linux [3.3] 言語: C [4] 期限: 明日の朝 [5] その他の制限:出来るだけ簡単に 意味不明なんでお願いします。
297 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 20:59:43 ] #include <stdio.h> int main(void) { FILE *fp; int m, p1, p2, s1 = 0, s2 = 0; char *member[] = {"", "会","特","非"}; if((fp=fopen("data03.dat", "r"))==NULL) return 0; printf("種別 購入金額(円) 支払い金額(円)\n"); while(fscanf(fp, "%d%d", &m, &p1)==2) { switch(m) { case 1: p2 = p1 * 9 / 10; break; case 2: p2 = p1 * 7 / 10; break; case 3: p2 = p1 < 15000 ? p1 : p1 - 1000; break; } printf(" %s %15d%15d\n", member[m], p1, p2); s1 += p1, s2 += p2; } printf("---------------------------------------\n"); printf("合計%15d%15d\n", s1, s2); return 0; }
298 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:08:06 ] >>296 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7785.txt
299 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:36:32 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7786.txt [3] 環境 [3.1] OS: Windows [3.2] Linux [3.3] 言語: C [4] 期限: 明日の昼 [5] その他の制限:出来るだけ簡単に
300 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:42:31 ] >>296 == >>299 ?
301 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 23:03:00 ] >>299 手ごわかったぜ #include<stdio.h> int nabeatu(int num){ if(num%3==0) return 1; for(;num>0;num/=10) if(num%10==3) return 1; return 0; } int main(void){ int i, n=100, nabeatu_count=0, stop_flag=0; printf("自然数を入力してください。\n"); scanf("%d", &n); for(i=1;i<=n;i++){ if(nabeatu(i)){ nabeatu_count++; if(nabeatu_count>10 && n-i>30){ static int is_first=1; if(is_first){ printf("〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜\n" " すいません、打つの大変なので中略します><\n" "〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜\n"); } is_first=0; stop_flag=1; }else{ if(!stop_flag) printf(" %5d%.*s", i, !(nabeatu_count%5), "\n"); if(nabeatu_count%5==0) stop_flag=0; } } } return 0; }
302 名前:デフォルトの名無しさん [2008/10/14(火) 23:15:36 ] 成績をつけるプログラムを教えてほしいです。 80点以上100点以内 A 65点以上80点未満 B 50点以上65点未満 C 0点以上50点未満 D それ以外の整数に対しては「ありえない」と出す
303 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 23:18:00 ] >>302 if elseでも並べておけば?
304 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 23:19:28 ] >>303 A・B・C・Dに分けれたのですが、101など100を超える場合を組み込めません
305 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 23:22:00 ] if else if else if else if else ありえない
306 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 23:22:47 ] #include <stdio.h> int main(void) { int score; scanf("%d",&score); if(80<=score&&score<=100) printf("A\n"); else if(65<=score&&score<80) printf("B\n"); else if(50<=score&&score<65) printf("C\n"); else if(0<=score&&score<50) printf("D\n"); else printf("ありえない\n"); return 0; }
307 名前:デフォルトの名無しさん [2008/10/14(火) 23:22:53 ] [1] 授業単元:データ構造 [2] 再帰的二分探索 入力の引数をint x(求める値)、int v[]、int n(要素数)の三つを用いて ループを使用せずに関数の再帰呼び出しを使うこと。 外部変数で値の受渡しはしてはいけない。 [3] 環境 [3.1] OS: Windows [3.2] gcc [3.3] C [4] 期限: 10月15日16:00まで [5] 探索する配列はソート済みのものと考えてよい。
308 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 23:26:38 ] >>306 できました。 ありがとうございました。
309 名前:298 mailto:sage [2008/10/14(火) 23:43:34 ] >>301 友達になれそうだなw
310 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 00:01:48 ] 質問です ある整数が格納されている配列seisuu[4]がある。 その配列の添え字に対応して優先度が格納される配列priority[4]を考える。 整数が小さいほど優先度は高くする。優先度は最高が4最低が0。 格納されている整数が0の場合は優先度は0。 格納されている数字は同じ場合もある。 というのを考えているのですが、 for(i=0 ; i<4 ; i++){ priority[i] = 1; /* 初期化 */ } for(i=0 ; i<4 ; i++){ if(seisuu[i] == 0){ priority[i] = 0; /* 整数が0なら優先度も0 */ }else{ /* 整数が0以外のものを発見 */ for(j=i+1 ; j<4 ; j++){ /* 発見した次の配列から数字のある配列を探索 */ if(seisuu[j] != 0){ /* 0以外の配列を発見 */ if(seisuu[i] < seisuu[j]){ /* 最初の方が小さいなら */ priority[i]++; /* 最初の方の優先度をアップ */ }else if(seisuu[i] > seisuu[j]){ /* 発見した方が小さいなら */ priority[j] = priority[i]+1; /* 発見した方の優先度を最初の方の優先度+1 */ }else{ /* 整数が同じなら */ priority[i] = priority[j]; /* 優先度を同一とする */ } } } } } このように考えてみたのですが、何か違うような気がします。 指摘等宜しくお願いします。
311 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 00:05:25 ] 5 3 2 3 と入っていたら 2 1 0 1 としたいということ?
312 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 00:20:04 ] >>311 レスありがとうございます 整数 :5 3 2 3だと 優先度:1 2 3 2 としたいです
313 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 00:40:31 ] >>312 要素数が4個固定ならガチで見てもいいと思うけど、 増減ありなら、構造体にでも詰めて、ソートしてからの方がいいように思う。
314 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 00:45:00 ] >>307 int *func(int x, int v[], int n){ int c; c=n/2; if(n<=0) return NULL; if(x<v[c]) return func(x, &v[0], c); if(x>v[c]) return func(x, &v[c+1], n-c-1); return &v[c]; }
315 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 01:24:52 ] >>300 YES >>301 ちょwこれはwwマジすかww これを参考に考えて見ますwあざす^^
316 名前:デフォルトの名無しさん [2008/10/15(水) 01:33:31 ] 1] 授業単元: 関数 [2] 問題文(含コード&リンク): 3次元のfloat型の配列 a[3]、b[3]、c[3]を頂点の座標とする三角形ABCを考える。 1.ベクトルの長さを計算する関数を作れ、ただし関数の宣言は以下のようになるようにせよ。 float Vnagasa(float *x); 2.ベクトルの差 z=y−xを計算する関数を作れ。ただし関数の宣言は以下のようになるようにせよ。 void Vhiku(float *x, float *y, float *z); 3.ベクトルの外積z=x×yを計算する関数を作れ。ただし関数の宣言は以下のようになるようにせよ。 void Vgaiseki(float *x, float *y, float *z); 4.上記1,2,3を用いて、ベクトルx、y、zを頂点とする三角形の面積を計算する関数を作れ。 float Vmenseki(float *x, float *y, float *z); 5.1,2,3,4に関してそれぞれ正しく動作しているかどうか確認するプログラムを作れ。 6.ベクトルx、y、z及び原点からなる三角錐の表面積を計算するプログラムを作れ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2008年10月20日16:00まで [5] その他の制限: 自分で関数の宣言をしなくてはならない 4番からがうまく出来ません お願いします
317 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 02:53:16 ] [1]C言語初級 [2]次のコードを並べ替えて動作するものにせよ。また 動作仕様を簡潔に述べよ。(コンパイル可能なコードと 動作仕様署を提出) for(k=0,j=1;j<=i/2;j++) k+=j; int main(int argc,char **argv){ if(i%j==0) int i=1,j,k,l,c=0; for(l=0,j=1;j<=k/2;j++) if(( i==l )&&(i<k)){ } } } l+=j; #include <stdio.h> return 0; c++; if( k % j==0 ) while(c<=10){ printf("(%d,%d)¥n",i,k); i++; [3] Solaris/Gnu C++/C [4]10/31正午まで 急ぎませんがよろしく御願いします。この手の問題 苦手中の苦手です。
318 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 03:09:27 ] /* for(k=0,j=1;j<=i2;j++) k+=j; if(i%j==0) int i=1,j,k,l,c=0; for(l=0,j=1;j<=k2;j++) if(( i==l )&&(i<k)){ } } l+=j; #include <stdio.h> c++; if( k % j==0 ) while(c<=10){ printf("(%d,%d)¥n",i,k); i++; int argc,char argv */ int main(){ return 0; } なにもせずに終了するプログラム
319 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 03:38:14 ] >>316 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7787.txt 6番は正しいか単体テストはしてない、答えが分るテストデータは自分で用意してくれ
320 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 08:33:14 ] >>317 #include <stdio.h> int main(int argc,char **argv){ int i=1,j,k,l,c=0; while(c<=10){ for(k=0,j=1;j<=i/2;j++) if(i%j==0) k+=j; for(l=0,j=1;j<=k/2;j++) if( k % j==0 ) l+=j; if(( i==l )&&(i<k)){ printf("(%d,%d)\n",i,k); i++; } c++; } return 0; } /*何も表示しないプログラム*/
321 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 10:48:31 ] うわあ。並べ替え分からんなあと思いながらやってたら>>320 と全く同じでワロタw
322 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 12:24:48 ] [1] 授業単元:マルチタスクプログラミング [2] 問題文(含コード&リンク): funcA 1〜5を表示する funcB A〜Eを表示する メインにてスレッドを生成し、生成したスレッドにfuncBを走らせる。 メインスレッドはfuncAを走らせる。 そのうえで表示結果が 「1A2B3C4D5E」となるようマルチタスクプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:VisualStudio2005 [3.3] 言語:C++ [4] 期限:10/17(金) [5] その他の制限:特に無し イベントのやり取りでスレッドを制御せよとのことなのですがサンプルを提示して 頂けると助かります。スレッド等イメージをまだ把握しておらず… 申し訳ないですが宜しくお願いします。
323 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 13:26:06 ] 並べ替え問題はこうだと思う。 友愛数を求めるアルゴリズム。 ja.wikipedia.org/wiki/%E5%8F%8B%E6%84%9B%E6%95%B0 #include <stdio.h> int main(int argc,char **argv){ int i=1,j,k,l,c=0; while(c<=100000){ for(k=0,j=1;j<=i/2;j++) if(i%j==0) k+=j; for(l=0,j=1;j<=k/2;j++) if( k % j==0 ) l+=j; if(( i==l )&&(i<k)){ printf("(%d,%d)\n",i,k); } i++; c++; } return 0; }
324 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 13:39:56 ] まちがった。こうだ〜! 友愛数を小さい方から10個見つけるプログラム。 #include <stdio.h> int main(int argc,char **argv){ int i=1,j,k,l,c=0; while(c<=10){ for(k=0,j=1;j<=i/2;j++) if(i%j==0) k+=j; for(l=0,j=1;j<=k/2;j++) if( k % j==0 ) l+=j; if(( i==l )&&(i<k)){ c++; printf("(%d,%d)\n",i,k); } i++; } return 0; }
325 名前:320 mailto:sage [2008/10/15(水) 13:44:18 ] >>323 なるほど forには{ }がなくてifには { }があるので2文以上入るんだろうなと思ったんだよ /* 友愛数を10個表示するプログラム */ #include <stdio.h> int main(int argc,char **argv){ int i=1,j,k,l,c=0; while(c<=10){ for(k=0,j=1;j<=i/2;j++) if(i%j==0) k+=j; for(l=0,j=1;j<=k/2;j++) if( k % j==0 ) l+=j; if(( i==l )&&(i<k)){ printf("(%d,%d)\n",i,k); c++; } i++; } return 0; }
326 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 14:15:14 ] >>322 後始末無視して簡単に書いてみた #include<windows.h> #include<stdio.h> HANDLE eventA,eventB; DWORD func(HANDLE self,HANDLE other,const char*str){ while(*str) WaitForSingleObject(self,INFINITE) , putchar(*str++) , SetEvent(other); return 0; } DWORD WINAPI funcA(LPVOID p){return func(eventA,eventB,"12345");} DWORD WINAPI funcB(LPVOID p){return func(eventB,eventA,"ABCDE");} int main(){ eventA = CreateEvent(0,0,1,0); eventB = CreateEvent(0,0,0,0); HANDLE f[] = {CreateThread(NULL,0,funcA,0,0,0),CreateThread(NULL,0,funcB,0,0,0)}; WaitForMultipleObjects(2,f,1,INFINITE); printf("\n"); }
327 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 14:23:45 ] >>326 ホント面倒かけて申し訳ない。 なにやってるか全くわからないけどとりあえず張り付けてデバッグします ありがとう
328 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 16:26:42 ] [1] 授業単元:数値計算 [2] 問題文(含コード&リンク): このアーカイブにはいってるprog.cのファイルの逆の処理をする プログラムを作ってほしいのですが。プログラムの説明はソースの一番上にかいてあります。 www1.axfc.net/uploader/He/so/147917 パスはsageです。知りたいところがあれば聞いてください [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限: 10/16 の12時くらい
329 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 16:34:57 ] /ディレクトリ以下ファイルを強制的に全部消去し、消去した ファイルのサイズの平均を求めるプログラムの逆の動作って どうやって定義するのでしょうか?
330 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 16:35:43 ] できない
331 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 17:04:22 ] >>328 ソースファイルだけあげればよかったのに。 a.outとかバックアップとかいらないしそもそもgzファイルじゃなくてtgzだろとか
332 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 17:28:25 ] いや確認用に
333 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 17:47:08 ] どこの馬の骨が作ったともしれないバイナリを実行するぐらいなら自分でコンパイルするだろ。 スレ的にも。
334 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 18:19:19 ] >>332 ふてくされるなよ
335 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 19:37:00 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7788.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限: 10/16 よろしくお願いします
336 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:03:36 ] >>335 if(*(s+i)==' '){ これを!とか,とかでも通るようなor条件をバカみたいに作ればいいと思うよ。
337 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:09:51 ] だよな。 そんなこともわからずにプログラムかいてるのか
338 名前:sage [2008/10/15(水) 20:35:06 ] [1]プログラミング及び演習 [2]標準入力から読み込んで標準出力へ書き出すプログラムのいろいろ #include <stdio.h> #define MAX 128 int main(void) { char buf[MAX]; while (fgets(buf, MAX, stdin) != NULL) fputs(buf, stdout); /* function */ return 0; } を参考に行番号を付加するプログラムを自作してみて下さい. 例えば,こんな感じで出力されれば OK です. 1: #include <stdio.h> 2: 3: int main(void) 4: { 5: int c; 6: 7: while ((c = getchar()) != EOF) putchar(c); 8: 9: return 0; 10: } [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:VisualStudio2005 [3.3] 言語: [4]期限: 10/21 [5]簡潔でも構わないので解説があると助かります よろしくお願い致します
339 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:01:14 ] >>337 自分のできる範囲でバカみたいにかいた上で、これはもうちょっと どうにかならんのかねって疑問がわき、そこでやっとASCIIコード体系なりis系関数なりを知って 感激しつつ改善するに至るんだが、いきなり結果を得ても何も理解できないし苦痛だよね。
340 名前:デフォルトの名無しさん [2008/10/15(水) 21:02:19 ] 自分の学籍番号,氏名をキーボードから入力し, 画面に表示するプログラムを文字型配列を用いて作成せよ
341 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:05:33 ] >>338 int i = 0; while (fgets(buf, MAX, stdin) != NULL) printf("%d: %s", i++, buf);
342 名前:338 mailto:sage [2008/10/15(水) 21:30:57 ] >>341 回答ありがとうございます。 試してみたのですが エラー E2342 numcpy.c 6: パラメータ '__s' は signed char * 型として定義されてい るので int は渡せない(関数 main ) と出てしまいました。 また自分の説明不足なのですが、まだ明解C言語入門編第8章という 初歩的なところまでしか学習しておらず、%sという表現が理解できません。 御手数おかけして大変申し訳ないのですが、もう少し簡単な回答を頂けないでしょうか?
343 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:56:16 ] >>342 >>341 じゃないけど。 numcpy.cを全部貼ってみて。 while (fgets(buf, MAX, stdin) != NULL) {fprintf(stdout, "%d: ", i++); fputs(buf, stdout);} これなら? 8章まで進んでたらprintfぐらい出てきてそうなもんだけどな。
344 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:57:03 ] >>338 #include <stdio.h> int main(void) { int buf,i=1; do{ printf("%d:",i++); while ( (buf=getchar()) != '\n' && buf!= EOF) ; }while(buf!=EOF); return 0; }
345 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:10:26 ] >>344 寝てこい
346 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:12:08 ] >>345 お前がまともなソースを書いてから意見しろよ、クズがw
347 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:14:56 ] >>346 まともなソースかどうか知らんが回答はしてる。 直近だと>>343 になってしまうけどな。
348 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:19:20 ] >>346 あんまりカリカリすんなよw どの宿題待ち?
349 名前:338 mailto:sage [2008/10/15(水) 22:21:56 ] >>343 >>344 回答ありがとうございます。 #include <stdio.h> #define MAX 128 int main(void) { char buf[MAX]; while (fgets(buf, MAX, stdin) != NULL) fputs(buf, stdout); /* function */ return 0; } と343を参考に #include <stdio.h> #define MAX 128 int main(void) { int i; char buf[MAX]; while (fgets(buf, MAX, stdin) != NULL) {fprintf(stdout, "%d: ", i++); fputs(buf, stdout);} return 0; } としてみましたが、 2147344384: 2147344385: 2147344386: 2147344387: となってしまいました。 自分なりに考えてみたのですが、どこが間違っているのでしょうか?
350 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:22:57 ] そんなエラー あれが間違ってるにきまってんじゃん。 そういうエラーに遭遇したことないのか
351 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:24:06 ] >>349 int i=0; のところを参考にし忘れてる
352 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:27:51 ] その変数がからかどうかを確認するのは 一番最初じゃね?
353 名前:338 mailto:sage [2008/10/15(水) 22:30:45 ] >>351 ご指摘ありがとうございます #include <stdio.h> #define MAX 128 int main(void) { int i=0; char buf[MAX]; while (fgets(buf, MAX, stdin) != NULL) {fprintf(stdout, "%d: ", i++); fputs(buf, stdout);} return 0; } 0: 1: 2: 3: 4: となりました。ただ、問題には 例えば,こんな感じで出力されれば OK です. 1: #include <stdio.h> 2: 3: int main(void) 4: { 5: int c; 6: 7: while ((c = getchar()) != EOF) putchar(c); 8: 9: return 0; 10: } とあるのですが、これで正解ということでいいんでしょうか? 何度も質問してしまい、申し訳ありません。
354 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:33:20 ] >>353 numcpy.exe < numcpy.c とかコマンドプロンプトで。 1から開始したいという要望が出ると思うけどそこは自分なりに考えて。
355 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:35:55 ] >>353 >>338 #include <stdio.h> #include <string.h> #define MAX 128 int main(void) { char buf[MAX]; int i=1,ch; FILE *tmp=tmpfile(); if(tmp==NULL) {perror(""); return 1;} while (fgets(buf, MAX, stdin) != NULL) fwrite(buf,strlen(buf),1,tmp); /* function */ rewind(tmp); do{ printf("%d: ",i++); while((ch=fgetc(tmp))!='\n' && ch!=EOF) putchar(ch); puts(""); }while( ch != EOF ); return 0; }
356 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:38:53 ] なっ、なぬっ!?リダイレクトを使うとな?ならば先にそう言うでおじゃるよ。
357 名前:338 mailto:sage [2008/10/15(水) 22:39:21 ] >>354 なるほど、そういうことだったんですね。 >1から開始したいという要望が出ると思うけどそこは自分なりに考えて。 はい。ここまで教えて頂けたので後は自力でなんとかしたいと思います。 色々と本当にありがとうございました。 >>355 回答ありがとうございます。 こちらも参考にさせて頂きますね。
358 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:00:56 ] >>328 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7790.c 気が向いたので、なんとなく作ってみた。
359 名前:328 mailto:sage [2008/10/16(木) 00:11:00 ] >>358 ありがとう。
360 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:23:58 ] >>358 俺が作ったのも同じバイナリを吐くんだけど、元のバイナリと内容が異なる
361 名前:358 mailto:sage [2008/10/16(木) 00:37:46 ] >>360 それをまたテキストも戻して、diffしてバイナリにする元のテキストと同じだから気にしなかった。 コンパイラやそのバージョンによっても、生成される機械語が違うからそんなもんだと思う。 最初にできたときにはdiffが違うのが気になって確認した。 しかし、float(0x3E624825)とfloat(0x3E62480F)が同じ値になっていたので、上げたんだけど。
362 名前:328 mailto:sage [2008/10/16(木) 01:23:45 ] まあ試験的に数値が多いテキストでもバイナリにしようとおもうんだけど この例では13個x()個てデータだったけど 30個x()個なかんじのデータだったらサイズもかえないといけないのかな? とおもったけどそうでもなさそうですね。
363 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:59:56 ] >>361 > コンパイラやそのバージョンによっても、生成される機械語が違うからそんなもんだと思う。 うーん、実行ファイルについてではなくて。 > しかし、float(0x3E624825)とfloat(0x3E62480F)が同じ値になっていたので、上げたんだけど。 なるほど。 にしても元のバイナリに戻せないのでは意味がないように思うんだなあ。何で変わっちゃうんだろ。
364 名前:デフォルトの名無しさん [2008/10/16(木) 02:48:17 ] 問題文:2つの円の位置関係(交わる(交点)、含まれる、離れている) これを求めるにはどんな感じで書けば良いでしょうか?
365 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 02:52:49 ] 数学じゃん! 2円の半径と中心間の距離を考える!
366 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 02:52:53 ] >>364 中心座標間の距離 - ( 円1の半径 + 円2の半径 ) の符号を調べる
367 名前:デフォルトの名無しさん [2008/10/16(木) 02:58:03 ] 数学的な考え方は解るのですが、 先週C++を始めたばかりで書き方がなかなか解りません;; 初歩的ですみません。
368 名前:358 mailto:sage [2008/10/16(木) 03:03:52 ] >>363 0 01111100 11000100100100000100101 (0x3E624825) 0 01111100 11000100100100000001111 (0x3E62480F) s [- e -] [--- m ---] (-1)^s × 2^(e-127) × (1 + m/(2^23)) (Sign, Exponent, Mantissaはそれぞれ、十進数) (-1)^(0)*2^(124-127)*(1+6440997/(2^23)) = 0.220978335 (-1)^(0)*2^(124-127)*(1+6440975/(2^23)) = 0.220978007 となるから、floatの精度のため値としては同じになったみたい。 16進表記で変わった理由は、機械語とそれに伴うFPU命令の違いからじゃないかな(実際はどうか知らん)。 エロい人後は頼んだ。
369 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 03:24:27 ] >>368 質問者でもない者に対して丁寧に細かくありがとう>< エンディアンそっちのけでバイナリデータ見てた俺のバカ!
370 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 03:32:57 ] まっ、麻呂のクソースはいらんかえぇ〜〜?
371 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 07:20:45 ] >>361 テキストにした時点で精度が落ちてるから元には戻せないよ
372 名前:デフォルトの名無しさん [2008/10/16(木) 08:49:22 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 英文を入力すると、単語に分割して出力するプログラムを書く。 ただし、ピリオドとカンマは出力しないようにすること。 (実行例) 英文を入力してください: There is , a textbook. --- There is s textbook --- [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 来週の木曜日 [5] その他の制限: 出来ればプログラミング下手な自分にもわかるように解説を付けてくれると助かります。 よろしくお願いします。
373 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 09:40:15 ] >>372 #include <stdio.h> #include <string.h> int main(void){ char buf[256]; char *p; printf("英文を入力してください:(255文字まで)\n"); fgets(buf, 256, stdin); p = buf; p = strtok(buf, " ,.\n"); while (p) { printf("%s\n", p); p = strtok(NULL, " ,.\n"); } return 0; }
374 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 10:04:36 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): まず大きな正方形のエリアがあり その大きな正方形の中に小さな正方形のエリアがある。 次に大きな正方形の線上で2点を取る。(一方は左下に固定) 左下の固定点と入力した大きな正方形の線上の二点を線で結び その直線が中の小さい正方形に重なるか重ならないかを判定する [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:10月中 [5] その他の制限:特になし 考えてみたけどさっぱりわかりません 正方形の大きさは変えられると助かります よろしくお願いします。
375 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 11:21:02 ] 数学知識に遥かにウェイトがある問題に言語の技巧の問題を 組み合わせた課題を出す教師は...
376 名前:デフォルトの名無しさん [2008/10/16(木) 11:29:00 ] 一般化すれば、 平面座標内に正方形と直線があり 交わりがあるかどうかを調べる
377 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 11:33:00 ] >>374 (数学の解) まず直線の傾きとy切片を求め直線の式を作れ y = ax + b 次に小さい正方形のx座標を代入してその値とy座標の値を比較 a * x1 + b - y1 a * x2 + b - y2 a * x3 + b - y3 a * x4 + b - y4 4つの正負が同じなら重ならない 1個でも負号が違えば重なる 0は適当にどちらかに決めて処理 ↓ Cでプログラム
378 名前:デフォルトの名無しさん [2008/10/16(木) 11:34:54 ] より一般化すれば、凸多角形の共通部分や、 多角形ポリゴン同士の衝突判定をしたいのですが。。。 だ。 Spaghetti Source - 凸多角形の共通部分 www.prefield.com/algorithm/geometry/convex_intersect.html 多角形ポリゴン同士の衝突判定をしたいのですが。。。 - 教えて!goo oshiete1.goo.ne.jp/qa675246.html
379 名前:374 mailto:sage [2008/10/16(木) 11:42:23 ] ありがとうございます 書き忘れて申し訳ないのですが二次元で大丈夫です >>377 さん 左下を原点とすれば切片0は可能ですよね? Cの知識がなさすぎて組めないorz
380 名前:デフォルトの名無しさん [2008/10/16(木) 13:32:11 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): bmp画像の各ピクセルごとの数値を読み込み、 二次元配列として表示するプログラムを作成せよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual Studio 2005 [3.3] 言語:C [4] 期限:10月中 [5] その他の制限:特になし まったく見当がつきません。 よろしくお願いします
381 名前:デフォルトの名無しさん [2008/10/16(木) 13:34:45 ] [1] 授業単元:c++builder [2] 問題文(含コード&リンク):下に提示 [3] 環境 [3.1] OS:windows xp [3.2] C++ builder5 [3.3] 言語:C++ builder [4] 期限: 10/17まで Memo1には Memo2には Memo3には Memo4には 5 4 5 2 6 3 2 6 5 1 8 4 6 4 6 6 と出してあるのですがこの4つのMemoの列に対応させて足し算したものを Memo5に 16 17 18 22 と出したいのですがどのようにすればいいんでしょうか。 builderに関してほとんど手探り状態なのでどなたかわかる方よろしくお願いします。
382 名前:デフォルトの名無しさん [2008/10/16(木) 13:58:13 ] 見当つかないんだったらフォーマットくらい調べろよ できるかもしれないじゃんか
383 名前:デフォルトの名無しさん [2008/10/16(木) 15:10:05 ] C++で2分法のf(x)=X*X-2 プログラムよろしくお願いします。
384 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 15:19:35 ] >>379 合ってるかどうかは知らない あと、くそーすだがあしからず #include <stdio.h> int main(void) { double x, y, a, tmp; int i; //大きな正方形の座標(左下、右下、左上、右上) double large_x[4] = {0.0, 10.0, 0.0, 10.0}; double large_y[4] = {0.0, 0.0, 10.0, 10.0}; //小さな正方形の座標(左下、右下、左上、右上) double small_x[4] = {5.0, 7.0, 5.0, 7.0}; double small_y[4] = {1.0, 1.0, 3.0, 3.0}; printf("大きな正方形の線上の点"); scanf("%lf %lf", &x, &y); a = y / x; tmp = a * small_x[0] - small_y[0]; for(i=1; i<4; i++){ if( tmp * (a * small_x[i] - small_y[i]) <= 0.0 ) break; } if(tmp > 0.0) printf("重ならない\n"); else printf("重なる\n"); return 0; }
385 名前:デフォルトの名無しさん [2008/10/16(木) 15:19:42 ] #include <stdio.h> #define GOSA 0.0001 float sqr(float c){ double x=c,y; while(1){ y=x*x; if(y>c-GOSA)if(y<c+GOSA)break; x -= (y-c)/(2*x);} return x; }
386 名前:デフォルトの名無しさん [2008/10/16(木) 15:19:46 ] [1] 授業単元:情報処理演習2 [2] 問題:1.大きさ5の配列の各要素に整数データを読み込みながら順次格納して、全要素を逆に並びかえて、その配列の0番から順に内容を表示するプログラムをつくりなさい 2.正整数を順次配列に読み込んで、三番目に大きな数(全て大きい数なら、左から三番目の数)を出力するプログラムを作れ。尚、0を読み込むと終了すること ただし、必ず3個以上を読み込むと仮定してもよい [3] 環境 [3.1] OS:Linux [3.2] gcc [3.3] 言語:C [4] 期限 16日の23:59分まで お願いします
387 名前:デフォルトの名無しさん [2008/10/16(木) 15:20:40 ] >>385 は X*X=cを解くプログラムね
388 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 15:50:49 ] >>386 (1) #include<stdio.h> int main(){ int a[5],i,left,right; for(i=0;i<5;++i)scanf("%d",a+i); for(left=0,right=5-1;left<right;++left,--right) i = a[left] , a[left] = a[right] ,a[right] = i; for(i=0;i<5;++i)printf("%d\n",a[i]); } (2) #include<stdio.h> #include<stdlib.h> int compare(const void*a,const void*b){ int c=*(int*)a,d=*(int*)b; return (c>d) - (c<d); } int main(){ int a[4]={-1,-1,-1,-1}; while(scanf("%d",a),*a != 0)qsort(a,sizeof a/sizeof*a,sizeof*a,compare); printf("%d\n",a[1]); }
389 名前:386 [2008/10/16(木) 17:00:07 ] すいません! osなんですが、Linuxとunix系OSを間違えて書いてました…… 正しくは OS:unix系のOSかwindowsです 申し訳ありません……
390 名前:デフォルトの名無しさん [2008/10/16(木) 18:45:15 ] [1] 授業単元: [2] 問題文(含コード&リンク): 以下のようなデータが大量に格納されているファイルがある. [ダウンロード www.vox.tutkie.tut.ac.jp/~katurada/test.list ] このファイルを読み込み,数値(キー)と英単語(データ)をセットにして 1データとして2分木へ格納し、数値(キー)にある値を指定して検索を行えば、 その数値(キー)に対応する英単語(データ)を検索できるプログラムを作成せよ。 ふたつめ 上記で使用したtest.list を読み込み,数値(キー)と英単語(データ)をセットにして 1データとしてリストへ格納し、数値(キー)にある値を指定して検索を行えば、 その数値(キー)に対応する英単語(データ)を検索できるプログラムを作成せよ。 そして、上記の木構造による実装との検索時間を比較せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:[2008年10月19日24:00まで]
391 名前:390 [2008/10/16(木) 18:46:22 ] 5] その他の制限: 1. 格納できるデータ量は(メモリの許す限り)上限はない. 2. 対応する英単語が見付からない場合は、その旨を表示すること。 3. データは,「数値,英単語\n」(\nは改行)で定義されるものとする. 4. データが格納されたファイルは、プログラムの引数で指定できるようにせよ。 5. データは2分木に格納せよ。 6. 数値(キー)に重複はない。 7. 数値(キー)は8桁以内である。もしファイルに9桁以上の数値が入っていた場合はエラーを出力して終了せよ。 8. 数値(キー)に数字以外の文字(アルファベットなど)が含まれていた場合は,エラーを出力して終了せよ. 9. 検索時の入力にも9桁以上の数値や数字以外の文字が入力された場合はエラーを出力して終了せよ. 10. 英単語は25文字以内である。もしファイルに25文字以上の英単語が入っていた場合はエラーを出力して終了せよ。 ふたつめ # リストによる実装において、データの挿入は数値(キー)によるソートは行わず、単純にファイルに出現した順番にリストに追加していって下さい。 # リストによる実装での検索も、単純にリストの先頭から比較していくような単純なアプローチで結構です。 # 1回の検索では検索時間の差がないでしょうから、10000回くらい繰り返して下さい。なお、test.list のデータ数は130万個あります。 よろしくお願いします。
392 名前:374 mailto:sage [2008/10/16(木) 18:46:38 ] >>384 ありがとうございます ヒントにしてもうちょい考えてみます
393 名前:デフォルトの名無しさん [2008/10/16(木) 21:26:24 ] >>373 ありがとうございました。 これを参考に、自分なりにもう少し頑張ってみます
394 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:02:18 ] >>380 bmpのフォーマットは?
395 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 23:06:39 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): UDPサーバkansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7791.txt UDPクライアントkansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7792.txt 問題文(2問あります)kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7793.txt [3] 環境 [3.1] OS:WindowsXP [3.2] Visual stdio2005 [3.3] 言語:C [4] 期限:10月17日午後13:00まで [5] その他の制限:特になし よろしくお願いします
396 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 00:43:47 ] [1] 授業単元:プログラミング技術 [2] 問題:30000以下の数字を入力して、「○時間、○分、○秒」と出力するプログラムを作りなさい。 <時間を分にして、分は秒にして、秒は分の答えの余り> [3] 環境 [3.1] OS:Windows XP [3.2] Ultla C [3.3] 言語:C [4] 期限 特にありません よろしくお願いします。
397 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:17:09 ] >>396 #include <stdio.h> int main() { int x; scanf("%d", &x); printf("%2d時間%02d分%02d秒", x / 3600, x % 3600 / 60 , x % 3600 % 60); return 0; }
398 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:28:59 ] [1] 授業単元:C [2] 問題:n=1 4973/n*2で始まり、4973/n*2の計算の答えが1になるまでnを増やしていき 1になったところで今まで出した数字を全部足した答えを出すプログラム。 少数は切り捨て。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限 [10/17/07:00まで] 2 4 8 4096 (4973/n*2)+(4973/n*2)+(4973/n*2)+・・・・(4973/n*2) 2486 + 1243 + 621 +・・・・ 1 =4965 手計算だと最後のnは2048になって答えが4965になったのですが。 プログラムについてはさっぱりなので助けてください。。。
399 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:36:21 ] >>398 あ、n*2じゃなくて、2^nです。
400 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:41:42 ] こんなでいい? #include<stdio.h> int main(){ int sum,ex; for(sum=0,ex=2; 4973/ex >= 1; ex*=2){ sum += 4973/ex; } printf("%d\n",sum); return 0; }
401 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:50:56 ] include <stdio.h> int main() { int n, sum = 0; for (n = 1; 4973 / (1 << (n - 1)) != 1; ++n) { sum += 4973 / (1 << (n - 1)); } sum += 1; printf("%d : %d", n, sum); return 0; }
402 名前:401 mailto:sage [2008/10/17(金) 01:51:44 ] すいません間違えました
403 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:54:33 ] そんなすっきりなプログラムが!! ありがとうございます!!
404 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:56:50 ] >>402 ぇ?答えの4956もでましたけど・・・
405 名前:404 mailto:sage [2008/10/17(金) 01:58:31 ] あ、>>400 の方と>>401 の方を読み間違えた自分が恥ずかしい…
406 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 03:26:13 ] >>392 if( tmp * (a * small_x[i] - small_y[i]) <= 0.0 ) ↓ if( (tmp *= (a * small_x[i] - small_y[i])) <= 0.0 ) な気がする
407 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 04:04:02 ] >>380 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7794.txt 全BMPフォーマット対応は面倒だから、条件付き、 良く読んで理解して使用のこと
408 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 04:51:51 ] >>407 ん〜〜〜
409 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 07:23:29 ] [1]授業 c [2] 問題: 1単語を入力し、その単語のスペルを判定する。その判定を Ctrl-D を入力するまで続ける。判定は、ファイル ``eng.txt'' にその単語が存在する場合に限り、スペルが正しいと判定する。 [3] 環境 [3.1] OS:linux [3.2] gcc [3.3] 言語:C [4] 期限 10/19 16:00 関数は何を使ってもいいです。 何日も考えたのですがぜんぜんわかりませんでした。 どなたかお願いします
410 名前:395 mailto:sage [2008/10/17(金) 07:26:17 ] すみません 問題文2問あるといっておいて4問ありました B1とB2のみで構いません 多少遅れても大丈夫なので引き続きよろしくお願いいたします
411 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 07:40:04 ] >>395 UDPサーバ:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7797.txt UDPクライアント:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7798.txt
412 名前:410 mailto:sage [2008/10/17(金) 07:48:20 ] >>410 ちょっと訂正 UDPサーバ:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7799.txt UDPクライアント:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7798.txt
413 名前:396 mailto:sage [2008/10/17(金) 07:59:31 ] >>397 ありがとうございました
414 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 08:29:04 ] 400と401の両方とも、条件部とループ内部で同じ計算をしてるのが無駄
415 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 10:31:23 ] >>412 ありがとうございました
416 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 11:13:35 ] >>411 そんなの最適化されるんじゃないの?
417 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 11:15:12 ] >>411 じゃなくて>>414
418 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 15:40:59 ] >>409 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7801.c
419 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 15:51:15 ] [1]C言語実習 [2]問題文 以下のコードは、2つのプログラム(同一動作)のコードを まとめたものです。(各ソースにおいて、行の順番は変えていません) このコードを2つのプログラムに分解して、それぞれコンパイルが 通り、同一の動作をするようにして下さい。 また処理内容についても簡単にコメントして下さい。 コード kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7802.c[3] Linux/Gnu-C4.0/C [4]無制限だそうです。難問だそうです。よろしくお願い致します。
420 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 15:55:13 ] >>416 よく知らないんだが、どのコンパイラでどのオプションつけるとこれが最適化されるの?
421 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 16:14:39 ] >>419 #include <stdio.h> int is_prime(int p){ int i; if(p<=1) return 0; if((p==2)||(p==3)) return 1; if((p%2==0)||(p%3==0)) return 0; for(i=3;i*i<=p;i+=2) if(p % i==0) return 0; return 1; } int main(void){ int i,c=0; for(i=1;i<=1000000;i++){ if(is_prime(i)) c++; if(i%100==0) printf("%d %d\n",i,c); } return 0; } 素数の個数を求めるプログラム 残りはエラトステネスの篩だな
422 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 17:57:37 ] >>420 僕もよく知らない、ってかよく知らないのに突っ込まないでください>< 基本的に、共通部分式の削除が行われるんじゃないですか?
423 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:25:25 ] 418さんありがとうございました 感謝です
424 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:01:06 ] [1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): BMI値を判定するプログラムを作成する 入力:身長t(m),体重w(kg) 出力:判定結果{やせ,標準,肥満} 身長をt(m),体重をw(kg)としたとき, BMI=w/tの二乗 BMI値が18.5未満⇒やせ BMI値が18.5以上かつ25.0未満⇒標準 BMI値が25.0以上⇒肥満 #include <stdio.h> int main(void) { float t, w; printf("t = "); scanf("%f", &t); printf("w = "); scanf("%f", &w); ????????????????????????????????←この部分が解りません。 } [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年10月20日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数,条件分岐(if文,if-else文)は習いました。 お願い致します。
425 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:06:21 ] int main(void) { float t, w, bmi; printf("t = "); scanf("%f", &t); printf("w = "); scanf("%f", &w); bmi = w / t / t; if (bmi < 18.5) printf("やせ\n"); else if (bmi < 25.0) printf("標準\n"); else printf("肥満\n"); return 0; }
426 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:55:26 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7788.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限: 10/18 すいません。なかなかうまくいきませんよろしくお願いします
427 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:03:49 ] いくつかレスをもらっても何も進歩してないことにがっかりした
428 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:29:19 ] >>426 ちゃんとみてないけど、 if(*(s+i)==' '){ の行を if(*(s+i)==' ' || *(s+i)=='?' || *(s+i)=='!' …){ ってやっていけばいいんじゃね
429 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:52:12 ] ということを>>336-337 が。
430 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 22:13:26 ] >>426 #include<stdio.h> #include<string.h> #define MAX 256 int main(void){ int len=0, max=0, moji; char s[MAX+1], l[MAX+1]=""; while((moji=getchar())!=EOF){ if(strchr(" \t\n?!.,()", moji) || len>=MAX){ if(len>max){ strcpy(l, s); max=len; } len=0; }else{ s[len++]=moji; s[len]='\0'; } } printf("The longest word is \"%s\"\n", l); return 0; }
431 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 23:41:45 ] 個人的にはif elseよりswitchの方が好きだ。
432 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 00:09:20 ] 個人的にはふさわしい方を使うのが好きだ。
433 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 00:15:54 ] >>390 二分木の方だけやってみた kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7805.txt
434 名前:デフォルトの名無しさん [2008/10/18(土) 10:37:12 ] [1] 授業単元:先輩の課題 [2] 問題文(含コード&リンク): 5.3 121.1 123.0 56.8 4.6 21.4 9.2 6.7 ・ ・ ・ みたいなtxtファイルがあるとします。 これを行ごとに呼んで double data[4]に順番にいれて、関数にわたす。 そして次の行をまた同じ配列data[4]にいれて、関数に渡すっていう処理するプログラムを書け [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Visual studio 2008 [3.3] 言語: C [4] 期限: 今日 [5] その他の制限: なし
435 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:18:31 ] >>434 意味不明 文章を見直せ
436 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:25:05 ] [1] 授業単元:先輩の課題 [2] 問題文(含コード&リンク): 5.3 121.1 123.0 56.8 4.6 21.4 9.2 6.7 ・ ・ ・ みたいなtxtファイルがあるとします。 これを行ごとに呼んで double data[4]に順番にいれて、関数にわたす。 そして次の行をまた同じ配列data[4]にいれて、関数に渡すっていう処理を ファイルの終わりまで繰り返すプログラムを書け [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Visual studio 2008 [3.3] 言語: C [4] 期限: 今日 [5] その他の制限: なし これでわかりますかね。すいません
437 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:33:08 ] >>436 #include <stdlib.h> #include <stdio.h> void f(double *d) { } int main(int argc, char *argv[]) { FILE *fp; double data[4]; if (argc != 2) return 1; if (!(fp = fopen(argv[1], "r"))) { return 1; } while (fscanf(fp, " %lf %lf %lf %lf", &data[0], &data[1], &data[2], &data[3]) == 4) { f(data); } return 0; }
438 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:34:52 ] >>437 ありがとうございます。 列が100ぐらいあるときは%lfを百個打つのはめんどくさいんですが・・・ なんとかなりませんか?
439 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:44:10 ] >>438 Ctrl+Vを99回押すだけだろ
440 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:44:49 ] >>439 そうなんですが・・・ソースが汚いのかなぁとおもいまして・・・
441 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:45:04 ] 9回コピーして10個まとめたのをあと9回コピー
442 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:51:09 ] >>440 見た目の問題かい ループで回したらいいじゃん while (!feof(fp)) { for (i = 0; i < 100; i++) { if (fscanf(fp, "%lf", &data[i]) != 1) { printf("error"); return 0; } } f(data); }
443 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:58:08 ] >>442 どうもありがとうございました
444 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 13:01:02 ] もうひとつ質問させていただきます。 入力ファイルの途中に 5.3 121.1 123.0 56.8 4.6 21.4 9.2 6.7 52.3 121.1 123.0 56.8 45.3 121.1 123.0 56.8 4.6 21.4 9.2 6.7 改行で空いてる行があったとしても正常に動きますか?ためしたところ問題ないようにみえましたが・・・
445 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 13:02:07 ] >>444 正常の定義は? エラーを出して止まるのが正常なのか 書式を無視するのが正常なのか
446 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 13:07:44 ] >>445 空白の行を無視して次の行から配列に代入する処理というのが正常です
447 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 19:03:24 ] [1]授業 c言語 [2] 問題:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7807.txt [3] 環境 [3.1] OS:linux [3.2] gcc [3.3] 言語:C [4] 期限 10/20
448 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 19:56:05 ] &s[i].id s[i].name &s[i].score[j]
449 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:10:12 ] [1] 授業単元:プログラミング基礎 [2] 問題文 体重と身長をキーボードから入力し、BMIを計算して出力するプログラムを書け。 BMIの計算はユーザ定義の関数を用いて行い、データの型にはdoubleを用いよ。 ただし、BMIの計算式は以下の通り。 BMI=体重(kg)/身長(m)^2 例:65kg/(1.70m * 1.70m) =22.49 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年10月21日まで [5] その他の制限: かなり初歩の段階みたいです。 よろしくお願いします。
450 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:27:55 ] >>449 >>424-425
451 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:31:24 ] >>449 #include<stdio.h> double bmi(double weight, double height) { return weight / (height * height); } int main() { double weight, height; printf("体重(kg)?"); scanf("%lf", &weight); printf("身長(m)?"); scanf("%lf", &height); printf("BMI=%g\n", bmi(weight, height)); return 0; }
452 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:56:20 ] >>450 >>451 すいません。説明不足でしたがelseやifなんかはまだ習ってないくらい初歩なので >>424-425 はよくわからないんです。 お早いレスで助かりました。ありがとうございます。
453 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 02:08:14 ] >>425 こんなに早くやって下さり、本当に有難う御座いました。 助かりました。
454 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 05:04:55 ] >>453 elseやifについてどう思うかを>>452 に伝えてやってくれまいか
455 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 13:54:08 ] [1] 授業単元:プログラミング [2] 問題文: "A>B"と入力すると"AはBより大きい"のように、不等式を文章に変換するプログラムを作成せよ。また、入力データと実行結果は以下の通りとし、変換された文章をテキストファイルに順番に出力すること。 実行結果 データ1:A>B データ2:B<C データ3:A<C ○○○.txtに出力しました ○○○.txt AはBより大きい BはCより小さい AはCより小さい [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:10/21 [5] その他の制限:可能な限り初歩的なものでお願いします
456 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 14:38:08 ] #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *fpr, *fpw; char s1[1000], s2[1000], c; if (argc != 3) { fprintf(stderr, "引数にこでたのむ\n"); return 1; } if (!(fpr = fopen(argv[1], "r"))) {fprintf(stderr, "ファイルが\n"); return 1; } if (!(fpw = fopen(argv[2], "w"))) {fprintf(stderr, "ファイルが\n"); return 1; } while (fscanf(fpr, " %[^<> ] %c%s", s1, &c, s2) == 3) { switch (c) { case '<': fprintf(fpw,"%sは%sより小さい\n", s1, s2); break; case '>': fprintf(fpw,"%sは%sより大きい\n", s1, s2); break; default: fprintf(stderr, "なかみが\n"); return 1; } } fclose(fpr); fclose(fpw); return 0; }
457 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 15:42:56 ] [1]授業 c言語 [2] 問題: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7807.txt [3] 環境 3.1 OS:linux 3.2 gcc 3.3 言語:C [4] 期限 10/20 すいません、よろしくお願いします。
458 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 15:48:02 ] >>447 >>448
459 名前:デフォルトの名無しさん [2008/10/19(日) 16:04:58 ] >>457 まず、リスト@はmain関数の外で定義な。中でもいいけど、個人的には外の方が分かりやすい。 で、○○○は上から順に &s[i].id s[i].name &s[i].score[j] あんまり偉そうなこといいたくないが、これって構造体の基本問題だろ?? できるだけ自分で解けるようにしないと後々、辛い目にあうぞ。
460 名前:457 mailto:sage [2008/10/19(日) 17:07:53 ] >>459 ウザいです。 偉そうな口を聞いて欲しくないです。
461 名前:デフォルトの名無しさん [2008/10/19(日) 17:20:54 ] >>460 本当のことだろーが 構造体の基礎の基礎も出来てないやつが喚くな餓鬼め
462 名前:457 mailto:sage [2008/10/19(日) 17:23:18 ] >>461 スレ違いです。出て行ってください。
463 名前:457 mailto:sage [2008/10/19(日) 17:25:13 ] そういうのは止めてください >>458 どうもすいませんでした >>459 ありがとうございます
464 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 18:22:51 ] >>457 >>1 > なりすましを防ぐため、トリップを使ってください。
465 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 19:44:19 ] ワロタ
466 名前: ◆iTaRIJflUs mailto:sage [2008/10/20(月) 00:09:33 ] [1] 授業単元:C言語プログラミング [2] 問題文 <その1> 以下のようなプログラムを作成しなさい. 2×10の2次元配列を定義し、1行目の配列([0][0〜9])に1から10までの数字を格 納し、2行目の配列([1][0〜9])に2の倍数を2から20まで格納し、配列に格納した 数字を画面出力するプログラム。 <その2> 以下のようなプログラムを作りなさい 10人の学生の成績が以下のようになっている。 int score[]={90,28,35,80,72,55,76,90,96,42} このとき、0から9までの学生の偏差値を計算せよ。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年10月21日朝9時まで [5] その他の制限: まだまだ初歩の段階です。 どなたかお願いします。
467 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 01:52:12 ] >>466 int num[2][10]; int i, j; for( i = 0; i < 2; i++ ) { for( j = 0; j < 10; j++ ) { num[i][j] = (j + 1) * (i + 1); /* (1〜10) × ( 1 or 2) */ printf( "%2d ", num[i][j]); } printf("\n"); }
468 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 02:14:52 ] >>466 その2 #include <stdio.h> #include <math.h> int main(void) { int score[]={90, 28, 35, 80, 72, 55, 76, 90, 96, 42}; int i, n = sizeof(score) / sizeof(score[0]); double sum = 0., sqsum = 0., mean; for (i = 0; i < n; i++) { sum += score[i]; sqsum += score[i] * score[i]; } mean = sum / n; printf("標準偏差 = %f\n", sqrt(fabs(sqsum / n - mean * mean))); return 0; }
469 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 08:39:37 ] [1] 授業単元:プログラミング [2] 問題文:x=1y=2 が関数swapをもちいてx=2、y=1となる。関数swapを呼び出す前後のx,yのアドレスを表示し、アドレスが渡されていることをしめせ。 [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:visual2005 c [3.3] 言語:C [4] 期限:10/23 お願いします
470 名前:デフォルトの名無しさん [2008/10/20(月) 08:44:26 ] 【質問テンプレ】 [1] 授業単元: C++ [2] 問題文(含コード&リンク): 前もって用意された暗号化された文のテキストファイルと暗号化されていない文のテキストファイルがあります。 暗号化されたテキストファイルの始めの3文字はXXXとなっています。 プログラムは最初の3文字をよんで、XXXだったらそのファイルを解読して新たなファイルに保存、 XXXじゃなかったらそのファイルを暗号化して新たなファイルに保存しなさい。 尚、テキストファイルが1000文字以上だったらexitすること。 (暗号はa→c,b→dのようなshift2です。) [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: Dev-C++ [3.3] 言語: C++ [4] 期限: 今日中 どうやってファイルの最初の3文字を判断するのかがまず分かりません..。 どなたか教えて下さい。
471 名前:デフォルトの名無しさん [2008/10/20(月) 11:33:38 ] [1] 授業単元:プログラミングC++ [2] 問題文:学籍番号、名前、姓、が記入されたリストを入力し、これを名前、姓、学籍番号の順に出力するC++ プログラムを書き、正しく動くことを確かめよ。 動作確認のためには、「実行ファイル < データリスト」のようにデータファイルを作り、コマンドラインでリダイレクションによりデータ入力せよ。 s10000001 Taro Aizu s10000002 Jiro Aizu s10000003 Nuri Aizu s10000004 Taro Kin s10000005 Atami Bandai s10000006 Kogen Bandai s10000007 Choucreme Hirota s10000008 Kitakata Ramen s10000009 Beko Aka s10000010 Jo Tsuruga [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン:g++ [3.3] 言語:C++ [4] 期限: 2008年10月23日00:00まで [5] その他の制限:特になし
472 名前:デフォルトの名無しさん [2008/10/20(月) 12:15:46 ] >>471 の補足ですが、ループを使うのが条件です
473 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 14:10:40 ] >>470 1000文字未満だったらfreadでchar[1000]に読み込んではじめの三文字見ればよくね?
474 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 18:10:38 ] 授業単元: C [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7810.txt 条件は関数 void sort3 の引数は3つの int 型の値であるが,これをポインタ変数を受け取る関数に書き換える.交換の作業はすべて関数内で処理し,main 関数では交換作業を行わないものとする 。 [3] 環境 [3.1] OS: Windows/Linux [3.2] コンパイラ名とバージョン: 任意 [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限:2008年10月23日まで
475 名前:デフォルトの名無しさん [2008/10/20(月) 18:33:20 ] [1] 授業単元:プログラミング [2] 問題文: Newton--Raphson法を用いて X*X*X-7X*X+16X-10=0 の解を求めよ。 [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:10/24 [5] その他の制限:初心者です。なるべく基本的な構造でお願いします。
476 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 18:48:16 ] >>474 void sort3(int *x, int *y, int *z) { int tmp; if (*y < *x) { tmp = *x; *x = *y; *y = tmp; } if (*z < *y) { tmp = *y; *y = *z; *z = tmp; } if (*y < *x) { tmp = *x; *x = *y; *y = tmp; } }
477 名前:デフォルトの名無しさん [2008/10/20(月) 19:07:40 ] #define GOSA 0.00001 #define F(X) (X*X*X-7*X*X+16*X-10) #define dF(X) (3*X*X-14*X+16) int main(){ double x=10,y; while(1){ printf("計算経過 %f\n",x); y=F(x); if(y>-GOSA)if(y<GOSA)break; x -= y/dF(x); } }
478 名前:デフォルトの名無しさん [2008/10/20(月) 19:22:25 ] #define GOSA 0.00001 #define F(X) (X*X*X-7*X*X+16*X-10) #define dF(X) (3*X*X-14*X+16) int main(){ double x=10,y; do{ x -= y/dF(x); printf("計算経過 %f\n",x); y=F(x); }while(y<-GOSA || y>GOSA); }
479 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 23:25:55 ] [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7806.txt [3] 環境 [3.1] OS: Windows) [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:無期限 [5] その他の制限:関数・配列は習いましたが、ポインタは知りません。 自分で書いてみたのですが、例えば15を打つと 「素数ではありません」「素数ではありません」「素数です」とでてしまいます。
480 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 23:36:28 ] else{ for(i=3;i<=no;i+=2){ if ((no%i)==0){ puts("素数ではありません"); break; } else{ puts("素数です"); break; } } }
481 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 23:57:28 ] >>479 int main(){ unsigned long int i ; unsigned long no = 0; printf("1から%luまで入力可能です\n", ULONG_MAX); do { printf("正の整数:"); scanf("%lu", &no); if (no <= 0) { puts("0以外、正の整数を入力してください") ; } while(no <= 0) ; if (no == 2) { puts("素数です"); } else if (no == 1 || no%2 == 0) { puts("素数ではありません"); } else { for ( i = 3; i * i <= no; i += 2) { if (no % i == 0) { puts("素数ではありません"); return 0; } } puts("素数です"); } return 0; }
482 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 00:06:50 ] >>480 481 ありがとうございます!
483 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 02:39:36 ] >>469 エスパーするとこうかな?関数swapを自分で書いて、呼び出す側とその関数内それぞれでアドレスを表示。 #include <stdio.h> /* aの指すデータとbの指すデータを交換する */ void swap( int *a, int *b) { int temp = *a; printf( "swap() : &a = %p, &b = %p\n", a, b); *a = *b; *b = temp; } int main(void) { int x = 1, y = 2; printf( "main() : x = %d, y = %d, &x = %p, &y = %p\n", x, y, &x, &y); swap( &x, &y); printf( "main() : x = %d, y = %d, &x = %p, &y = %p\n", x, y, &x, &y); return 0; }
484 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 08:16:08 ] >>483 俺は int* temp = a; a = b; b = temp; かと思った
485 名前:デフォルトの名無しさん [2008/10/21(火) 12:43:13 ] >>473 ありがとうございました。調べてみます。
486 名前:デフォルトの名無しさん [2008/10/21(火) 12:53:22 ] >>476 それでコンパイルすると3つ目の整数を入力してから入力した整数が小さい順に出力されるようにしたいんだけどそれだとエラー起きてしまうのですが・・・
487 名前: ◆3VUXqvbfSY mailto:sage [2008/10/21(火) 13:04:05 ] 【質問テンプレ】 [1] 授業単元:計算機プログラミングII [2] 問題文(含コード&リンク): 単精度実数型配列(float)を宣言する。その配列にn個のデータを入力する。その配 列名をポインタとして用いて,入力したn個のデータの最大値と最小値を求め,その 結果とそれら値が何番目に入力されたかを出力するプログラムを作成せよ。 ただし,複数回の異なる場合について実行してみること。データ入力の際,値が昇順 または降順にならないようにすること。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc (注) gcc -Wall -ansi -std=c89 -pedantic ファイル名.c のようにしてコンパイル [3.3] 言語:C [4] 期限:2008年10月23日10:30まで [5] その他の制限:ポインタを習い始めたばかり,for文やif文,関数,配列,文字列の基礎は学習済み おねがいします。
488 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 14:14:37 ] >>486 関数のプロトタイプ宣言 void sort3(int *x, int *y, int *z); 呼び出し sort3(&n1, &n2, &n3);
489 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 17:19:27 ] >>487 どうやって入力するのかわからなかったけど、 とりあえず標準入力から一行ずつ float の値を一つ読み込こんでいくようにしておいた kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7812.txt
490 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 18:11:11 ] 簡単なゲームを作っているのですが、今まで使っていたアイコンは32×32だったので、それを16×16のサイズにしようと思い、そのサイズの画像を取り込んだら、32×32のサイズに拡大されて表示されてしまうのですがどうしたらよいのでしょう? アイコンファイルってサイズ指定するとこないですよね?
491 名前: ◆3VUXqvbfSY mailto:sage [2008/10/21(火) 18:30:43 ] 【質問テンプレ】 [1] 授業単元:計算機プログラミングII 対象:学部2年次 [2] 問題文(含コード&リンク):問題2( /2問) 次に示す手順により,入力されたデータのデータの総和を求めるプログラムを作成せよ。 (1) 適当な要素数の倍精度実数型配列(double)を宣言する。 (2) 上記(1)で宣言された配列の先頭アドレスをポインタ変数に代入する。ポインタ 変数を利用して上記(1)で宣言した配列に対して,キーボードから実数データを 入力する。ただし,Ctrl-Dが入力されたら,データの入力を終了する。 (3) ポインタ変数を利用して,参照アドレスを移動しながら入力されたデータの 総和を計算する。 (4) 入力したデータおよびそれらの総和を表形式で出力せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc (注) gcc -Wall -ansi -std=c89 -pedantic ファイル名.c のようにしてコンパイル [3.3] 言語:C [4] 期限:2008年10月23日10:30まで [5] その他の制限:ポインタを習い始めたばかり,for文やif文,関数,配列,文字列の基礎は学習済み お願いします。
492 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:03:53 ] >>491 いいオプションがついてるな。 ってことはいい先生って事だ。たぶん。
493 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:13:49 ] 2枚の画像を読み込んで、それを引き算をして、その引き算した画像を出力するプログラムをお願いします。
494 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:35:27 ] [1] 授業単元:データー構造とアルゴリズム設計 [2] 入力された文字を,リストを用いて順次格納する.’−’が入力された時に文字の入力を終 了し,それまでに格納された全ての文字を表示するプログラム (例) a ←入力 b ←入力 c ←入力 − ←入力 c ←出力 b ←出力 a ←出力 [3] 環境 [3.1] OS:Linux ver3.1 [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 来週まで [5] その他の制限:特にありません
495 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:38:47 ] もう1つ [1] 授業単元:データー構造とアルゴリズム設計 [2] 入力された小文字のアルファベットを,リストを用いて順次格納する.’−’が入力された 時に文字の入力を終了し,それまでに格納された全ての文字を表示するプログラムを作成 せよ.ただし,リストに格納する際,リストの最後に追加するようにせよ. (例) a ←入力 b ←入力 c ←入力 − ←入力 a ←出力 b ←出力 c ←出力 [3] 環境 [3.1] OS:Linux ver3.1 [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 来週まで [5] その他の制限:特にありません
496 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:39:23 ] お願いします。
497 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 20:56:21 ] [1] 授業単元: 信号処理 [2] 問題文(含コード&リンク): @ 209921行5列の2次元配列のファイルを読み込みなさい。ファイルの値を1024個で区切り1024個中の値の平均値と平均値から突飛している値=最大値を求めなさい。最大値をmax1、max2、max3、・・・・として最大値は1個とは限らないこととする。 また1024個の最大値を求め終わったら、次の1024個の最大値を求めなさい。 この作業をファイルの最後の2097152個目の値までやりなさい。 ただし、ファイルのサイズは17.2MBととし十分なメモリ領域を確保すること。 ヒント:malloc関数 ※ファイル↓(17MBもあるのでDLするのに時間がかかるかもしれません。お手数かけます。) kissho4.xii.jp/50/src/5yoshi7327.txt.html DLKey:data A 求めた最大値を2次元配列でpeak.txtに出力しなさい。1行目を最初の1024個中で求めた最大値を出力させ、2行目からは次の1024個中から求めた最大値を出力させなさい。 同様に3行目、4行目、・・・と順次最大値を出力させなさい。 例:peak.txt 472 234 800 578 ・・・・ 677 347 554 532 ・・・・ 843 637 347 551 ・・・・ ・ ・ ・ [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: LSI−86 [3.3] 言語: C [4] 期限: 2008年10月23日午後3時 [5] その他の制限: 特になし よろしくお願いします。
498 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 22:04:04 ] よくわからないけど平均値どこ行ったの?
499 名前:358 mailto:sage [2008/10/21(火) 23:39:49 ] >>494 ,495 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7813.zip 参考程度にしてくれ >>497 ロダ死亡 LSIのは、むかし試食版とか使ったことあるけど、もうしらねぇ。 www1.axfc.net/uploader/Ne/so/34790.zip 参考程度にしてくれ DLkey : foo
500 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 00:02:22 ] ちょっと修正、勘違いしていた、気がしないでもない。 ついでに、全ソースもつけといたので、環境に合わせてコンパイルとリンクしてくれ ロダ生きてたみたい kissho1.xii.jp/7/src/7jyou16166.zip.html DLkey : foo ってか、358ってなんだ、前のがそのまんまだった。
501 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 01:44:49 ] [1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク):カレンダー風の出力 下に示すようなカレンダー風の出力を行うプログラムをwhile文を使って作成してください。 ・1〜31までの範囲とします。 ・printf関数で表示幅をそろえます。(右揃え) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年10月23日(木)までお願いします。 [5] その他の制限: 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)は習いました。 お願いします。
502 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 02:23:57 ] >>498 平均値は最大値を求めるだけに使うので、出力とかはしなくていいんです。 ↓(手書きで申し訳ないですけど・・・)イメージ的には↓ kissho.xii.jp/1/src/1jyou52627.bmp.html DLkey:foo >>499 >>500 ありがとうございます。早速、明日学校でコンパイルしてみます。 本当に助かりました。
503 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 03:55:43 ] >>502 圧縮するという事を学ぼう。 テキストはzipに、bmpは形式を変更。
504 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 06:21:16 ] >>501 #include <stdio.h> int main(void) { int i=1; while(i!=32){ printf("%2d ",i); if(!(i%7)) printf("\n"); i++; } return 0; }
505 名前::デフォルトの名無しさん [2008/10/22(水) 11:35:56 ] >>501 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7816.txt
506 名前:デフォルトの名無しさん [2008/10/22(水) 11:47:05 ] オブジェクト形式マクロを用いたNUMBER人の点数を配列tensuに 読込み,秀(90〜100点),優(80〜89点),良(70〜79点),可(60 〜69点),不可(0〜59点),判定不能(0未満あるいは100点より 上)の人数を,それぞれ変数a,b,c,d,e,fに格納・表示し,更に最高 点,最低点,合計点,平均点を表示するプログラムを作成せよ.た だし,最高点,最低点,合計点,平均点の計算において,判定不能 の点数は除外すること. なおNUMBERの値は10とし,平均点は小数点以下第2位まで表示 すること. という問題誰か教えてください。
507 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 11:48:05 ] [1] 授業単元: [2] 問題文(含コード&リンク): 5.6 29.2 ・・・・25.2 2.7 ・・・ ・ ・ ・ -1.0 mozi 6.7 ・・・・ という様に数値データが書かれたファイルを読み込む。各行に100個の正の実数が書かれている。 これを1次元配列data[100]に順番に入れて、表示する。 これをファイルの終わりまで行う。 -1.0から始まる行があるが、その行は読み飛ばし、次の行から処理を行うようにすること [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC [3.3] 言語: C [4] 期限:今日 [5] その他の制限: なし
508 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 11:55:37 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク):文字列を入力すると,英小文字を大文字に変換して出力するプログラムをポイン タを用いてつくりなさい。但し,ライブラリ関数toupper を用いないこと。また,文字 列の入力には,ライブラリ関数であるgets 関数を用いること。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:08年10月23日23:00まで よろしくお願いします。
509 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 12:47:36 ] [2] ・dx/dt = t という式についてx(t=0)=0として,x(t) をt=0 から1 まで求めるEuler法のプログラムを作れ. 時間刻み(h)をどの程度小さくすると,真値(解析解:x=0.5*t*t)にどの程度近づくかを調べよ. ・FitzHugh-Nagumo方程式の解軌跡を求めるプログラムを作成せよ. ・作成したプログラムを使って、興奮性を示すx,yの初期値を一組探しグラフで結果を示せ. 初期値も自由に設定して良いが、うまくパラメータが見つからない場合は、a=0.7, b=0.8, c=20, z=1.0 を使用すること. dx/dt=c(x-x^3)/(3+y+z) dy/dt=(a-x-by)/c [3] 環境 [3.1] Windows [3.2] コマンドプロンプト [3.3] C [4] 明日17時 [5] わからないのを3つ載せましたが、1つでも構わないのでなんとかお願いします。
510 名前::デフォルトの名無しさん [2008/10/22(水) 13:08:58 ] >>508 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7817.txt
511 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 13:52:57 ] >>510 ありがとうございました!
512 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 14:32:51 ] わざわざ文字列の長さを求めなくてもAllCharactersToUpperのfor文の条件をstr[i]!='\0'にすればいいと思う。
513 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 14:50:28 ] >>509 Cじゃないけどエクセルで作ってみたw kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7818.zip
514 名前::デフォルトの名無しさん [2008/10/22(水) 15:14:32 ] >>507 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7819.txt
515 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 15:41:27 ] 2つの画像を読み込んで、1つ目の画像から2つ目の画像を引き算をした画像を作りたいんですが どのような感じで作ればいいでしょう?
516 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 15:55:18 ] 2つの画像を読み込んで、1つ目の画像から2つ目の画像を引き算するような感じで 作ればいいと思います
517 名前::デフォルトの名無しさん [2008/10/22(水) 16:21:40 ] >>507 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7820.txt
518 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 16:25:34 ] >>514 最初の1行しか読まれないんですが・・・
519 名前::デフォルトの名無しさん [2008/10/22(水) 16:30:51 ] >>518 >>517 で試してみて
520 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 16:32:18 ] >>519 3つめでしょうか?
521 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 16:36:01 ] >>518 プログラムざっとみたけど1行目しか読んでない
522 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 16:42:31 ] >>519 3つめでやったら、コンパイルは通るんですが、バッファーオーバーランでとまります・・・
523 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 16:50:24 ] do-while間のi初期化忘れてるな
524 名前:523 mailto:sage [2008/10/22(水) 16:53:21 ] 投稿者が見てるか分からんが i=0; ←追加 do{ (略) }while(dp = strtok(NULL,gDlim)); これで動くように一見見える
525 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 16:54:36 ] >>524 動きました。がやはり1行目しか読まれないみたいです
526 名前:523 mailto:sage [2008/10/22(水) 17:01:18 ] char *dp,*p,*gDlim = " \n\r"; ↓ char *dp,*p,*gDlim = " "; これもミスっぽいな
527 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 17:17:20 ] >>504-505 お二人とも本当に有難う御座いました。 助かりました。
528 名前::デフォルトの名無しさん mailto:sage [2008/10/22(水) 17:25:24 ] >>525 読み込むファイルアップしてみ
529 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 17:29:51 ] fgets後にstrtokで" \r\n"渡してるからじゃん? これだと行頭しか処理されないよ。
530 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 17:31:44 ] strtokとか使う必要あんの?普通にfscanfのほうがよくね?とか無責任に言ってみる
531 名前:517 mailto:sage [2008/10/22(水) 17:39:35 ] 行頭に-1.0がある行は無視するという条件だから 行中に-1.0があっても読み込むためにstrtokを使った ちなみにfscanfつかったソースは#if 0〜#endif の間に残してある
532 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 17:42:21 ] >>529 そうなんですか?やはり1行目しか読まれません
533 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 17:47:15 ] あと1行1列が2回表示されます・・・
534 名前:デフォルトの名無しさん [2008/10/22(水) 17:53:07 ] >>533 だから読み込むファイルアップしてみ
535 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 17:57:21 ] >>534 見落としてました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7821.txt これです。横に100個って書いたんですが、12個のファイルしかなかったです。 先ほど頂いたソースは100のところを12に書き換えました。
536 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 17:59:29 ] >>534 俺も適当にddata.txt作ってみたけど1列目が2回出たなあ
537 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 18:03:30 ] 実数が100個並ぶのにバッファは512かあ。
538 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 18:15:03 ] >>535 なんかこれでいいかわかんないけどつくってみた #include<stdio.h> #include<stdlib.h> #include<string.h> int main(){ FILE* fp; char buf[1024],*cp; double data[100]; int i,cnt; if((fp = fopen("in.txt","r")) == NULL) return 1; while(fgets(buf,sizeof(buf),fp) != NULL){ if(strnicmp("-1.0",buf,strlen("-1.0")) == 0) continue; cp = buf; cnt = 0; while((cp = strtok(cp," \t\r\n")) != NULL){ data[cnt++] = atof(cp); cp = NULL; } for(i=0;i<cnt;i++) printf("%f\n",data[i]); } fclose(fp); }
539 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 18:19:14 ] return 0; わすれちゃった。
540 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 18:42:16 ] >>538 うまくうごきました。ありがとうございます。
541 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 19:01:36 ] [1] 授業単元:C [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7823.txt 問1.このプログラムではxの零乗が3x{0}と表示されるため3と出力されるようにする 問2.このプログラムでは入力の逆順に単項式が出力されるためそれを入力した順番に単項式が出力するようにする [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: お任せ [3.3] 言語: C [4] 期限: 2008年10月24日hh:mmまで
542 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 19:25:10 ] 画像を読み込み、引き算したプログラムを自分なりに作ったんですが #include <stdio.h> #include <stdlib.h> #include<math.h> #define XL 900 #define YL 900 int main(int argc, char**argv) { FILE *fp1, *fp2, *fp3; int i; float opx, px1, px2; fp1 = open("argv[1]", "rb"); fp2 = open("argv[2]", "rb"); fp3 = open("argv[3]", "wb"); for(i=0; i<XL*YL; i++){ fread(&px1,sizeof(float),1,fp1); fread(&px2.sizeof(float),1,fp2); opx = px1-px2; write(&opx,sizeof(float),1,fp3); } fclose(fp1); fclose(fp2); fclose(fp3); return 0; } コンパイルが通らず、エラーがでてしまいます; アドバイスを頂けるとうれしいです
543 名前:デフォルトの名無しさん [2008/10/22(水) 19:26:15 ] 380 >>407 遅くなりましたが、回答ありがとうございました!! もっと自分で学習せないかんですね・・・
544 名前:デフォルトの名無しさん [2008/10/22(水) 19:27:58 ] fread(&px1,sizeof(float),1,fp1); fread(&px2.sizeof(float),1,fp2); write(&opx,sizeof(float),1,fp3); &いるっけ?
545 名前:デフォルトの名無しさん [2008/10/22(水) 19:28:47 ] ごめん、いるわw 勘違いでした
546 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 19:47:51 ] ×fp1 = open("argv[1]", "rb"); ○fp1 = open(argv[1], "rb"); ×fread(&px2.sizeof(float),1,fp2); ○fread(&px2.sizeof(float),1,fp2); ^
547 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 19:48:27 ] ああ、まちがえた。 ×fread(&px2.sizeof(float),1,fp2); ○fread(&px2,sizeof(float),1,fp2); ^
548 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 20:11:32 ] 483 484 お二人ともありがとうございました。質問の内容がわかりにくくてすいません。 ありがとうございました
549 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 20:26:48 ] >>541 問1 最後のfor内を次のようにする printf("%+d", pwork->coef); if(pwork->degree_of_x) printf("x^{%d}", pwork->degree_of_x); 問2 printf("Input the coefficient: ");の前にpmx->next = poly;を入れる poly = pmx;の後ろのpmx->next = poly;を消す
550 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 21:22:28 ] [1] 授業単元: 信号処理 [2] 問題文(含コード&リンク): @ 209921行5列の2次元配列のファイルを読み込みなさい。ファイルの値を1024個で区切り1024個中の値の平均値と平均値から突飛している値=最大値を求めなさい。最大値をmax1、max2、max3、・・・・として最大値は1個とは限らないこととする。 また1024個の最大値を求め終わったら、次の1024個の最大値を求めなさい。 この作業をファイルの最後の2097152個目の値までやりなさい。 ただし、ファイルのサイズは17.2MBととし十分なメモリ領域を確保すること。 ヒント:malloc関数 ※ファイル↓(17MBもあるのでDLするのに時間がかかるかもしれません。お手数かけます。) kissho6.xii.jp/14/src/1yon14506.zip.html DLKey:data A 求めた最大値を2次元配列でpeak.txtに出力しなさい。1行目を最初の1024個中で求めた最大値を出力させ、2行目からは次の1024個中から求めた最大値を出力させなさい。 同様に3行目、4行目、・・・と順次最大値を出力させなさい。 例:peak.txt → 472 234 800 578 ・・・・ 677 347 554 532 ・・・・ 843 637 347 551 ・・・・ ・ ・ ・ [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: LSI−86 [3.3] 言語: C [4] 期限: 2008年10月23日午後3時 [5] その他の制限: 特になし >>500 gccでコンパイルしてみたんですが、うまくいきませんでした。 エラー表示 → main.c:56: undefined reference to`_nao_DList_t_ctor' よろしくお願いします。
551 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 21:25:05 ] >>497 >>550 問題文修正しました [1] 授業単元: 信号処理 [2] 問題文(含コード&リンク): @ 209921行5列の2次元配列のファイルを読み込みなさい。ファイルの値を1024個で区切り1024個中の値の平均値と平均値から突飛している値=最大値を求めなさい。最大値をmax1、max2、max3、・・・・として最大値は1個とは限らないこととする。 また1024個の最大値を求め終わったら、次の1024個の最大値を求めなさい。 この作業をファイルの最後の2097152個目の値までやりなさい。 ただし、ファイルのサイズは17.2MBととし十分なメモリ領域を確保すること。 ヒント:malloc関数 ※ファイル↓(17MBもあるのでDLするのに時間がかかるかもしれません。お手数かけます。) kissho6.xii.jp/14/src/1yon14506.zip.html DLKey:data A 求めた最大値を2次元配列でpeak.txtに出力しなさい。1行目を最初の1024個中で求めた最大値を出力させ、2行目からは次の1024個中から求めた最大値を出力させなさい。 同様に3行目、4行目、・・・と順次最大値を出力させなさい。 例:peak.txt → 472 234 800 578 ・・・・ 677 347 554 532 ・・・・ 843 637 347 551 ・・・・ ・ ・ ・ [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc または LSI−86 [3.3] 言語: C [4] 期限: 2008年10月23日午後3時 [5] その他の制限: 特になし >>500 gccでコンパイルしてみたんですが、うまくいきませんでした。 エラー表示 → main.c:56: undefined reference to`_nao_DList_t_ctor' よろしくお願いします。
552 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 21:31:09 ] [1] 授業単元: C++ [2] 問題文(含コード&リンク): 標準入力から山の名前とその標高を入力し、標高の高い順にソートして、山の名前を表示するプログラムを作れ。 STLのpairを使うこと。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: VC [3.3] 言語: C++ [4] 期限: 明日 [5] その他の制限: 特になし
553 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 21:44:28 ] [1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): void desc_array(int n, int *array) { int i; for (i = n-1; i >= 0; i--) array[i] = i; } 降順にソートされた配列を作成したいが、上の関数では昇順に配列が作成されてしまうので誤りである。 そこで上の関数を正しい形に修正し、ディスプレイに表示し実際に降順となっていることを確かめられるプログラムを作れ。 (降順というのはたとえば、a[0] = 0, a[1] = -1, a[2]= -2, ..., a[n-1] = -(n-1)となっていればいい。) [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 10月23日 [5] その他の制限:無し お願いします。
554 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 21:56:59 ] >>551 あれ、だめだったのか。 Terminalから、makeするだけでいいはずなんだけどconfigure作ってなかったからかもしれないなぁ。 READMEファイルでも読んで、ダメだったらどうしよう。 kissho1.xii.jp/7/src/7jyou16183.zip.html DLkey : foo 処理の効率化とかヘッダファイルに使いかたとか書いといたので、うまくいかなかったらソース自体変更してみてね。
555 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 22:17:30 ] >>553 array[i] = i; ↓ array[i] = -i;
556 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 22:20:37 ] >>554 :set backupdir=/tmp とでもするといいよ。ってemacsでも~作るんだったらそっちはわかんね><
557 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 22:29:17 ] >>552 こんなん? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7824.txt
558 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 22:49:48 ] >>556 ありがたく追加させていただきました。 基本viを使っています。たまにvimになったり、geditになったりもしますが、emacsは使いません。 でも、S式っていいよね、とか言ってみるてst。
559 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 23:22:08 ] >>551 これでいい? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7827.txt
560 名前:デフォルトの名無しさん [2008/10/22(水) 23:31:34 ] [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク):x^3-7x^2+16x-10=0 の解をニュートン法を用いて求めるプログラムを作りなさい。 [3] 環境 OS: Windows [4] 期限: 2008.10.24 お願いします。
561 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 23:47:43 ] >>560 はい。 #include<stdio.h> #include<math.h> #define EPS 0.0001 //x^3-7x^2+16x-10 double f(double x){ return x*(x*(x-7)+16)-10; } //3x^2-14x+16 double df(double x){ return x*(3*x-14)+16; } int main(){ double x,next=0; do{ x=next; next = x - f(x)/df(x); }while(fabs(next-x) > EPS*fabs(x)); printf("%f\n",next); }
562 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 23:51:22 ] [1] 授業単元: C [2] 問題文(含コード&リンク): プログラムの冒頭で #define YEAR 2005 #define MONTH 12 #define DATE 24 #define HOUR 00 #define MIN 00 #define SEC 00 #define STEP 20 と定義して、STEP秒毎の西暦、月、日、時、分、秒を99STEP分出力する関数を作成せよ。 「出力例」 01:2005/12/24/00:00:00 02:2005/12/24/00:00:20 03:2005/12/24/00:00:40 04:2005/12/24/00:01:00 ・ ・ ・ 99: [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: borland c++5.5 [3.3] 言語: C [4] 期限: ([2008年10月24日まで] [5] その他の制限: なし 以上よろしくお願いします。
563 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:04:47 ] >>555 ありがとう。作成した配列をディスプレイに表示する所が分からないのですが、 printf内にどうやってdesc_arrayで作成したarray[i] = iの部分を書けばいいのでしょうか?
564 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:06:39 ] printf("array[%d] = %d,i,srray[i])
565 名前:デフォルトの名無しさん [2008/10/23(木) 00:11:11 ] >>561 ありがとうございます。
566 名前:デフォルトの名無しさん [2008/10/23(木) 00:19:41 ] すいません>>560 ですが コンパイルしようとすると bccは内部コマンド、外部コマンド 操作可能なプログラムコマンドまたはバッチファイルとして認識しません。 と出るんですが、どうすればいいのですか??
567 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:25:41 ] bcc32じゃないの? つーかそもそもコンパイラはいってるの?
568 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:26:32 ] 宿題以前だろ…
569 名前:デフォルトの名無しさん [2008/10/23(木) 00:38:00 ] >>567 >>568 すいませんでした・・・ 解決しました。
570 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:40:20 ] >>562 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7829.c
571 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:42:54 ] >>562 #include<stdio.h> #include<stdlib.h> #include<time.h> #define YEAR 2005 #define MONTH 12 #define DATE 24 #define HOUR 00 #define MIN 00 #define SEC 00 #define STEP 160000 int main(){ int i; char buf[1024]; struct tm date; time_t now; date.tm_year = YEAR - 1900; date.tm_mon = MONTH - 1; date.tm_mday = DATE; date.tm_hour = HOUR; date.tm_min = MIN; date.tm_sec = SEC; for(i=1;i<=99;i++){ if((now = mktime(&date)) == -1) return 1; strftime(buf,sizeof(buf),"%Y/%m/%d/%X",&date); printf("%02d:%s\n",i,buf); date.tm_sec += STEP; } }
572 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 01:17:36 ] [1] 授業単元:C [2] 問題文(含コード&リンク):3つの整数を入力し,それらを比較して,大,中,小を判定しなさい. 3つの整数が同じ値の場合,あるいは2つの整数が同じ値の場合でも 正確に判定ができるように対応すること. 全ての条件を場合分けするプログラムは不可とする. [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 10月30日13:00 [5] その他の制限: 特になし お願いします
573 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 01:18:46 ] 下記のように出力するプログラムをprintf,getsを用いて作成せよ. ./a.exe 学籍番号は? XXXXXXXXX 名前は? AAAA BBBB 学籍番号: XXXXXXXXX 名前 :AAAA BBBB
574 名前:573 mailto:sage [2008/10/23(木) 01:21:05 ] >>573 の続き ↓じゃ出力のAAAAが出ないのですがどうしたらいいですか? #include<stdio.h> int main() { char st1[80]; char st2[80]; printf("学籍番号は?"); scanf("%s",st1); gets(st2); printf("名前は?"); scanf("%s",st2); gets(st2); printf("学籍番号:%s\n",st1); printf(" 名前 :%s\n",st2); }
575 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 01:23:25 ] >>574 scanfいらない
576 名前:573 mailto:sage [2008/10/23(木) 01:25:35 ] >>573 の補足 学籍番号は? XXXXXXXXX 補足→ XXXXXXXXXはキーボードで打ちます 名前は? AAAA BBBB 補足→ AAAA BBBBはキーボードで打ちます
577 名前:573 mailto:sage [2008/10/23(木) 01:27:02 ] >>575 即レスありです。 両方ともいらないですか?
578 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 01:35:17 ] >>577 両方いらないです。
579 名前:573 mailto:sage [2008/10/23(木) 01:41:48 ] 名前はちゃんと出ましたが学籍番号がちゃんと出ません><
580 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 02:02:51 ] >>579 記載ミスだと思ってスルーしてましたが 1つめのgetsの引数は st1 にしていますよね?
581 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 02:03:35 ] >>574 #include<stdio.h> int main() { char st1[80]; char st2[80]; printf("学籍番号は?"); gets(st1); printf("名前は?"); gets(st2); printf("学籍番号:%s\n",st1); printf(" 名前 :%s\n",st2); return 0; }
582 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 04:59:48 ] >>572 #include<stdio.h> int main(void){ int a, b, c, flag = 0; printf("Input Number (a,b,c) : "); scanf("%d,%d,%d", &a, &b, &c); if(a >= b) flag |= 0x01; if(b >= c) flag |= 0x02; if(c >= a) flag |= 0x04; printf("大中小\n"); switch(flag){ case 0x01: printf("%2d%2d%2d\n", a, c, b); break; case 0x02: printf("%2d%2d%2d\n", b, a, c); break; case 0x03: printf("%2d%2d%2d\n", a, b, c); break; case 0x04: printf("%2d%2d%2d\n", c, b, a); break; case 0x05: printf("%2d%2d%2d\n", c, a, b); break; default: printf("%2d%2d%2d\n", b, c, a); } return 0; }
583 名前:573 mailto:sage [2008/10/23(木) 08:21:48 ] >>581 ありがとうございます。
584 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 09:54:51 ] >>564 #include<stdio.h> void desc_array(int n, int *array) { int i; for (i = n-1; i >= 0; i--) array[i] = -i; } int main() { int n,i; int *array; n =8; desc_array(n,array); printf("array[%d] = %d",i,array[i]); return 0; } mainの中のどこが違うんでしょうか?セグメントエラーを吐きます。
585 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 10:00:08 ] >>554 >>556 ありがとうございました。うまくコンパイルすることができました。 本当に助かりました。m(__)m >>559 シンプルでわかりやすいプログラムありがとございます。 まだちゃんと解読してないんですけど、peak.txtの出力した最大値が 1024個中5個だけってことなんでしょうか? 一応、求めた平均値より突飛して高い値(最大値とする) をpeak.txtに出力したいんですけど・・・最大値の数は特に指定はないです。
586 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 10:11:17 ] >>584 main() 無効なアドレスをさしている変数 array たぶんやりたいのは、 #include <stdlib.h>を、#include <stdio.h>のしたあたりに追加。 n = 8;の後に、array = (int *)malloc(sizeof(int) * n); if ( array == NULL ) { fprintf(stderr, "Error : Bad alloc !\n"); exit(8); } その後、desc_array(n, array); で、arrayを使わなくなったら、free(array);
587 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 10:17:06 ] MCIでデータ1データ2データ3を同時に鳴らした時、 コールバックでどのデータが終了したか どうやって判断したらいいですか?
588 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 10:47:44 ] [1] 授業単元: 情報工学演習 [2] 問題文(含コード&リンク): 数独のような問題を解くプログラムと、ポーカーでの強さを判定するプログラム 詳細は下のテキストファイルに書いてあります kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7830.txt [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 10月24日13時まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) main関数は必ずテキストファイルに書いてあるもののままにしてください。 それ以外の部分もなるべくそのままでお願いします。 また、なるべく理解したうえで少し自分なりに手直したいので、 どんな手順で判定を行っているのかなど、軽く説明していただけると助かります。 できれば今日中にお願いします。急なお願いで申し訳ありません。
589 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 10:49:54 ] >>584 int *array; を int array[8]; にしたらいい
590 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 11:37:57 ] >>584 そもそも i に値がはいってないな。
591 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 12:22:37 ] >>585 なんか5個だと思い込んでたw てか最大値って言葉わかりにくいー極大値とか外れ値とかそんな感じ?? 飛び抜けて大きな値って平均値の何倍かとかで調べたいんですか? よくわかんないので標準偏差の何倍かで調べるようにしてみました。 てかこのまえupした画像で考えると、グラフで飛び出した点を求めなきゃいけないとするといったん並べ替えるのはよくないのだろうか・・・?? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7831.txt
592 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 12:56:53 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ユーザから2から100までのいずれかの整数を受け取り、1からその数までの総和を計算する プログラムをfor文を使って書け。利用者が範囲外の数値を入力した場合、「値が範囲内にありません」 などのエラー表示を行え。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名 gcc [3.3] 言語: C [4] 期限: 2008/10/25 [5] その他の制限:まだ初めて日が浅く、習ったのはif else文やforループくらいまでです。 よろしくお願いします。
593 名前:デフォルトの名無しさん [2008/10/23(木) 13:03:19 ] 1] 授業単元:c++ builder [3] 環境 [3.1] OS:Widows XP [3.3] 言語:C++ [4] 期限:2008/10/24 [5] その他の制限:Cの基本言語程度 Memo1に60行の配列の乱数を出したのですが、そのMemo1にある60行の乱数の平均の数を Edit1に出すプログラムがどうしてもできません。 どなたか教えていただけないでしょうか。よろしくおねがいします。
594 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 13:19:31 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク):100 個の整数型配列を宣言して,各要素に2〜200 の偶数値を格納し,配列要素の 総和を求めて出力するプログラムをつくりなさい。ただし,配列への値の格納,総和の 計算ともポインタを用いて実行すること。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:08年10月24日24:00まで どうかお願いします。
595 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 13:55:57 ] >>588 問2 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7832.txt これでいい? 問題文にあった3つの動作例でしかチェックしてない。
596 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 14:07:55 ] [1] 授業単元:プログラム・C言語 [2] 問題文(含コード&リンク): 以下のようなプログラムを作成しなさい まず標準入力から、姓と名をそれぞれ別のchar配列型変数で受取る。 次に別の空のchar配列型変数に名と姓の間にスペースを挿入して格納し、表示するプログラム。 ※ヒント 空のchar配列型変数に「名」を入れる時はstrcpy()、スペースと「姓」を追加する時はstrcat()を使う とよい。 実行例 ./a family name? sato first name? zin zin sato [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名 gcc [3.3] 言語: C [4] 期限: 2008/10/25 [5] その他の制限:まだ序の口レベルです。 #include <stdlib.h>のみでお願いします。 何卒よろしくお願いします。
597 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 14:19:28 ] >>592 #include <stdio.h> int main(void) { int n, i, sum=0; printf("値を入力してください\n"); scanf("%d", &n); if(n < 2 || n > 100) { printf("値が範囲内にありません\n"); } else { for(i=1; i<=n; i++) { sum += i; } printf("総和 = %d\n", sum); } return 0; }
598 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 14:22:11 ] >>596 #include <stdio.h> #include <string.h> int main() { char family_name[16], first_name[16], name[32]; printf("family name? "); gets(family_name); printf("first_name? "); gets(first_name); strcpy(name, first_name); strcat(name, " "); strcat(name, family_name); printf("%s", name); return 0; }
599 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 14:29:38 ] >>594 #include <stdio.h> void Set(int *buf) { int i; for(i = 0; i < 100; i++) buf[i] = (i+1)*2; } int Sum(int *buf) { int i, sum = 0; for(i = 0; i < 100; i++) sum += buf[i]; return sum; } int main() { int buf[100]; Set(buf); printf("%d", Sum(buf)); return 0; }
600 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 14:40:52 ] >>595 返答ありがとうございます。 無理でしたら構いませんが、なるべく関数poker_hand内で全ての動作を 記述している形がよいので、できればその形に組みなおしていただきたいのですが とりあえず参考にしつつ自分でも作ってみておきます。 問1に関してもできればnumber_place内で全て記述している形でお願いします。 無茶な要求をしてしまって申し訳ありません。
601 名前:デフォルトの名無しさん [2008/10/23(木) 14:59:44 ] [1] 授業単元:CG(C言語使用) [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7835.zip OpenGLによるCGを用いたプログラムを、自由に設計する課題を作成。 条件として、「アニメーションが行えること」、「キーボード入力によって何らかの 操作が行えること」、「シェーディングやテクスチャマッピングを適切に使用できること」 です。前者2つとシェーディングは何とか理解出来ますが、テクスチャマッピングが 思うように設計できません。どなたか専門知識をお持ちの方、私が添付したプログラムのどの 辺にどのような関数をセットすればよいかなど、いわゆる作成方法についてご指導 お願いします。なお、テクスチャマッピングは壁を設計する予定です。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Borland C++(bcc32) [3.3] 言語:C [4] 期限:2008年10月23日22時半 なお、期限については今日中としますが、今日中に良い意見が集まらなければ明日も 募集する予定です。宜しくお願いします。
602 名前:デフォルトの名無しさん [2008/10/23(木) 15:02:17 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7833.lzh ↑↑の画像の一番明るい場所を、 画像の中心を(0,0)とした座標として表示するプログラムを つくりなさい。また、その明度の値も表示するようにしなさい。 例に示した画像はjpeg形式ですが、非圧縮bmp(白黒) の場合でも可能です。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual Studio 2005 [3.3] 言語:C [4] 期限:今月中 [5] その他の制限:なし よろしくお願いします。
603 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 15:08:51 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 文字列を入力し、その文字列が外部のテキストファイルに存在すれば、OK!と表示するプログラムを作れ 外部テキストは apple egg ・ ・ ・ のように10万個ほどの単語が書かれている。 効率的に探せるならば、C++のSTL等を用いてよい [3] 環境 [3.1] OS: Xp [3.2] VC 6.0 [3.3] 言語: C++ [4] 期限:明日 [5] その他の制限: お願いします
604 名前:592 mailto:sage [2008/10/23(木) 15:12:26 ] >>597 早いレスで助かります。 どうもありがとうございました。
605 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 15:22:15 ] >>600 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7836.txt もうやだ。こんなプログラム見たくねえorz
606 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 15:33:58 ] ただのストレートでも 10 → A いけるんだとしった ロイヤルの時だけだと思ってたわ
607 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 15:36:11 ] >>582 ありがとうございます
608 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 15:38:37 ] >>588 問1 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7837.txt 合ってるといいなw
609 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 16:03:17 ] >>603 こんなでいい? #include<iostream> #include<fstream> #include<string> #include<set> using namespace std; typedef set<string> Dictionary; int main(){ string word; Dictionary dict; ifstream ifs("in.txt"); if(!ifs.is_open()) return 1; while(!ifs.eof()){ ifs >> word; dict.insert(word); } ifs.close(); while(1){ cout << "Search:"; cin >> word; if(dict.find(word) != dict.end()) cout << "OK!" << endl; else cout << "Not found." << endl; } }
610 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 16:09:27 ] >>599 丁寧な回答ありがとうです!
611 名前:デフォルトの名無しさん [2008/10/23(木) 17:50:21 ] [1] 授業単元:文字列の探索 [2] 問題文(含コード&リンク): (1)ファイルの先頭からテキストを1行ずつ(1行の文字数は999文字以下とする)読み込み、 何行目の何文字目に検索文字列の先頭が存在するか出力する。 (2)探索文字列中に同じ文字が複数含まれる場合について検索方法を改良する。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7838.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc (ver不明です) [3.3] 言語: C言語 [4] 期限: 2008年10月27日23:59まで [5] その他の制限:問題文中のプログラムの「//ここにボイヤームーア法」の場所を補ってプログラムを組む感じです。 どうかお願いします。。
612 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 19:16:59 ] >>602 libjpeg 使っていいんだったら kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7840.txt
613 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 19:37:45 ] >>598 あなたのお陰で非常に助かりました。 ありがとうございます。
614 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 19:41:20 ] [1] 授業単元: アルゴリズムとデータ構造 [2] 問題文:次の関数のゼロ点を求めるプログラミングをせよ。 f(x) = x^4-10x^3+ 35x^2-50^x+24 探索区間はx = 0から5(数学的表現では、x = [0; 5))であり 実数解が4個あることを留意せよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 10月24日1300まで [5] その他の制限:2分法を使って組んでいただけませんか。
615 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 20:49:21 ] >>614 #include <stdio.h> #include <math.h> double f( double x ) { return pow(x,4) -10 * pow(x,3) + 35 * pow(x,2) - pow(50,x) + 24; } int main() { double x = 1.0; printf( "f(%lf) = %lf\n", x, f(x) ); return 0; }
616 名前:614 mailto:sage [2008/10/23(木) 20:54:54 ] >>615 おい ふざけんな
617 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 21:09:28 ] 【質問テンプレ】 [1] 授業単元:仕事 [2] 問題文(含コード&リンク): "00 00 01 bd 80 80 ...." とスペースや改行も含めた テキストファイルから 0x00 0x00 0x01 のバイト列に 変換するコードをください [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C/C++どちらでも可 [4] 期限: 2008/10/24 10:00 [5] その他の制限:特に無しです よろおね
618 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 21:11:04 ] >>614 実数解が1個しか無いんだが。。。 #include <stdio.h> #include <math.h> #define DELTA 1e-4 double f(double x) { return pow(x, 4) - 10*pow(x, 3) + 35*pow(x, 2) - pow(50, x) + 24; } int main(int argc, char *argv[]) { double left = 0.0, right = 5.0, mid = 2.5; if (f(left) * f(right) > 0) { return 1; } while (fabs(f(mid)) > DELTA) { mid = (left + right) / 2; if (f(left) * f(mid) < 0) right = mid; else left = mid; } printf("x = %f\n", mid); return 0; }
619 名前:614 mailto:sage [2008/10/23(木) 21:16:10 ] すいません関数が間違っていました f(x)=x^4-10*x^3+35*x^2-50*x+24
620 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 21:27:33 ] [1] 授業単元:文字列 [2] 問題文(含コード&リンク): mozi1_mozi2_mozi3のように_で区切られた文字列を標準入力から入力し、stringに格納する。 char *list1[5] = {"test","test2","test3","test4","test5"} と *list2[3] = {"hoge",hoge2","hoge3"} の文字列へのポインタの配列 がある。 mozi1はlist1の文字列と比較し、一致するものがあればその添え字を表示し、 mozi2はlist2の文字列と比較して、同様の動作をするプログラムを作れ。 mozi1がtest2であれば1を表示 mozi2がhoge3であれば2を表示する。一致するものがなければその旨を表示すること [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC [3.3] 言語: C++ [4] 期限: 2008年10月25日 [5] その他の制限 お願いします。
621 名前:615 mailto:sage [2008/10/23(木) 21:43:09 ] >>619 >>616
622 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 21:55:07 ] >>611 質問が BM法ってリスト2つ使った奴じゃないと駄目? それとも簡略版でいいのかしら
623 名前:デフォルトの名無しさん [2008/10/23(木) 22:49:19 ] 1] 授業単元: C++ [2] 問題文: ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7841.txt [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:Visual stdio2005 [3.3] 言語:C++ [4] 期限:10月 24日(土)まで 期限が短いですがお願い致します。
624 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 22:53:58 ] ここってGUIも受け付けてもらえますか?
625 名前:デフォルトの名無しさん [2008/10/23(木) 22:56:54 ] 受け付けてもらえます
626 名前:611 [2008/10/23(木) 22:57:38 ] >>622 ありがとうございます。 講義内でも問題文に書かれた以上のことは言われなかったのですが、簡略版で大丈夫です。 とりあえず、「力まかせの探索」でなければ大丈夫とのことでした。
627 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 22:58:21 ] [1] 授業単元: 信号解析 [2] 問題文(含コード&リンク): 一定周期を持つ弱い外力f(t) とガウス分布するノイズξ(t) を受けながら、ポテンシャル Vo(x) 中を動く玉の運動は、玉の座標をx(t) として、 τdx/dt = -dV/dx + ξ(t) < ξ(t)ξ(t') > = A * б (t - t') < ξ(t) > = 0 …@ で記述される。ここで、A はノイズの強さ、τ は系の時定数である。また、全ポテンシャル V (x; t) は、時間と共に周期的にその形を変える: V(x,t) = Vo(x) - f(t)x = -1/2*ax^2 + 1/4*bx^4 - hxcos(wt) で与えられる。 a = 1.0 * 10^(-3)、b = 1.0 * 10^(-5)、 h = 2 * 10^(-3)とする。 t = 0 において、玉はx = 10 にあるとする。 τ = 1.0 * 10^(-4)、ノイズの分散 A = 7.0*10^(-4)、ω = 2π/10とする。 @式を時間発展させて、玉の位置と周期的な外力f(t)に比例する量である10cos(ωt)をグラフに表せ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年10月24日23:59まで [5] その他の制限: 特になし よろしくお願いします
628 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 23:00:13 ] >>624 では書きます。 [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ファイルを開く・保存のコモンダイアログを使い、選択されたファイルをテキストに書き出すプログラムを作れ。 ファイルは複数選択される場合もある。 express版の場合、外部のリソースエディタは用いてかまわない。 出力されるファイル test.bmp data.wav data2.wav [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual studio 2008 [3.3] 言語: C or C++ [4] 期限: 2008年10月26日 [5] その他の制限
629 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 23:02:11 ] >>627 問題文修正しました [1] 授業単元: 信号解析 [2] 問題文(含コード&リンク): 一定周期を持つ弱い外力f(t) とガウス分布するノイズξ(t) を受けながら、ポテンシャル Vo(x) 中を動く玉の運動は、玉の座標をx(t) として、 τdx/dt = -dV/dx + ξ(t) < ξ(t)ξ(t') > = Aб(t - t') < ξ(t) > = 0 …@ で記述される。ここで、A はノイズの強さ、τ は系の時定数である。また、全ポテンシャル V (x; t) は、時間と共に周期的にその形を変える: V(x,t) = Vo(x) - f(t)x = -1/2*ax^2 + 1/4*bx^4 - hxcos(wt) で与えられる。 a = 1.0 * 10^(-3)、b = 1.0 * 10^(-5)、 h = 2 * 10^(-3)とする。 t = 0 において、玉はx = 10 にあるとする。 τ = 1.0 * 10^(-4)、ノイズの分散 A = 7.0*10^(-4)、ω = 2π/10とする。 @式を時間発展させて、玉の位置と周期的な外力 f(t) に比例する量である 10cos(ωt) をグラフに表せ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年10月24日23:59まで [5] その他の制限: 特になし よろしくお願いします
630 名前:デフォルトの名無しさん [2008/10/23(木) 23:03:31 ] この分野では、Sunday のアルゴリズムが究極では? 表 : 実行結果 : 時間 (秒) : 比較回数 ------------------------------- 力任せ : 0.133 : 149,938 BM 法 : 0.046 : 30,168 BMH 法 : 0.041 : 29,728 quick : 0.033 : 25,094 www.geocities.jp/m_hiroi/light/pyalgo11.html
631 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 00:41:06 ] 名前を変えるほど改良されてる訳でもない気がしないでもない
632 名前:デフォルトの名無しさん [2008/10/24(金) 01:09:30 ] Quick Search algorithm www-igm.univ-mlv.fr/%7Elecroq/string/node19.html The C code void preQsBc(char *x, int m, int qsBc[]) { int i; for (i = 0; i < ASIZE; ++i) qsBc[i] = m + 1; for (i = 0; i < m; ++i) qsBc[x[i]] = m - i; } void QS(char *x, int m, char *y, int n) { int j, qsBc[ASIZE]; /* Preprocessing */ preQsBc(x, m, qsBc); /* Searching */ j = 0; while (j <= n - m) { if (memcmp(x, y + j, m) == 0) OUTPUT(j); j += qsBc[y[j + m]]; /* shift */ } }
633 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 01:11:48 ] [1] 授業単元:C [2] 問題文: (1)1〜50までの整数の中から異なるいくつかをえらんび、 掛け合わせても一の位が0にならないようにする。選ぶことができる整数は40個。 上の文をプログラムで出力せよ。 (2)1〜50までの全てを掛け合わせると末尾の0を数えるプログラムを書け。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 10月24日8:00 [5] その他の制限:特になし (1)は2の倍数、5の倍数が少なくとも1個ずつ入ったときにだけ1の位が0になる ので2の倍数と5の倍数が同居しないように計算します。
634 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 02:25:39 ] >>633 (2) #include <stdio.h> int main(void) { int i, c1 = 0, c2 = 0; for(i=1; i<=50; i++) { int temp = i; for(; !(temp%2); c1++) temp /= 2; for(; !(temp%5); c2++) temp /= 5; } printf("%d", c1 < c2 ? c1 : c2); return 0; }
635 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 02:55:22 ] >>634 あたまいいなあ
636 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 03:09:59 ] (2)は50を5^nで割った商を足してけばいいと思う int cnt=0,t; for(t=5;50/t;t*=5){ cnt+=50/t; } printf("%d\n",cnt);
637 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 03:12:31 ] 理由は素因数として2より5の方が少ないから。 数字を並べてみて1~50までに因数の5がいくつあるか数えるには?
638 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 03:36:40 ] 理由はもっともだが>>636 にはハテナがたくさんだ
639 名前:デフォルトの名無しさん [2008/10/24(金) 04:41:46 ] >>623 期限は10月24日(金)の11:00でした。 書き間違えてすみません。 よろしくお願いします。
640 名前:639 mailto:sage [2008/10/24(金) 06:35:26 ] 期限はアメリカ東海岸時間(EST)の10月24日(金)の11:00です 日本時間だと10月25日の11:00になります。 再再度訂正すみません
641 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 06:43:17 ] すいません、C/C++以外の課題を聞けるスレってあります?
642 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 06:59:49 ] [1] 授業単元: C [2] 問題文: 2つの固有値から2×2の行列を求めるプログラムを作りなさい。 固有値は整数のみとする。 [3] 環境 [3.1] OS:WindowsXP [3.2]コンパイラ名とバージョン:Visual studio [3.3] 言語:C [4] 期限:明日まで [5] その他の制限:特になし
643 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 11:03:10 ] 620をお願いします
644 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 11:44:17 ] [1] 授業単元:C言語 (ポインタ) [2] 問題文(含コード&リンク):出力例のように キーボードから0〜9 の数字d と,正の整数n を読み込み,n 以下の整数x で, x とx の2 乗の10 進数表示の両方にd を含むものをすべて出力するプログラムをつくりなさい。 ただし,次のプロトタイプ宣言で示すように,整数x とd を仮引数として, x とx の2 乗の10 進数表示の両方にd を含む場合に1,そうでない場合に0 を返す 関数hit_digit を作成しなさい。 int hit_digit(int x, int d); ▼出力例 0〜9 の数字d を入力して下さい:7 正の整数n を入力して下さい:100 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:08年10月25日24:00まで [5] その他の制限:C言語の基本的な関数のみでお願いします。
645 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 12:04:13 ] >>639 和訳くらいしたらどうなの・・・
646 名前:602 [2008/10/24(金) 12:33:22 ] >>612 回答ありがとうございます! 助かりました。
647 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 12:41:56 ] >>644 #include <stdio.h> int hit_digit(int x,int d); int main(void) { int d,n,x; printf("0〜9 の数字d を入力して下さい:"); scanf("%d",&d); printf("正の整数n を入力して下さい:"); scanf("%d",&n); for(x=0;x<=n;x++) if(hit_digit(x,d)) printf("%d\n",x); return 0; } int hit_digit(int x,int d) { int y,z; y=x; z=x*x; for(;y;y/=10) if(y%10==d) for(;z;z/=10) if(z%10==d) return 1; return 0; }
648 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 13:34:34 ] >>591 レス返信遅くなりました。 最大値というよりは極大値という感じですね。 飛び抜けて大きな値ってのは (平均値+5*ρ) 以上の値のことを指し示すのですが ρってのが平均値の標準偏差です(たぶん)。 グラフで飛び出した点を求めたら、並べ替えなくていいそうです。 てかコンパイル通したら、peak.txtが出力されませんでした。今、プログラム解読中です(汗)
649 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 14:39:57 ] [1] 授業単元: C言語 [2] 問題文:縦軸「|」横軸「-」グラフ「*」 を使って±√xのグラフを書け [3] 環境 [3.1] OS:mac [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限: 10月26日 [5] その他の制限: 基本的な関数のみでお願いします
650 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 15:36:43 ] >>649 #include <stdio.h> int main() { int x, y; for (y = -4; y < 5; y++) { putchar('|'); for (x = 0; x < y * y; x++) { putchar(' '); } putchar('*'); putchar('\n'); } return 0; }
651 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 15:37:15 ] 横軸忘れた
652 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 16:05:49 ] [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): トランプを切る方法の1つとして、トランプを2つにわけて両手でぱらぱらと切る方法がある。 今、トランプは、ジョーカーを除いた52枚とする。もし、切り方のうまい人がいて、トランプ を正しく半分(26枚)にして、かつ交互に1枚ずつ切れるとする。 この方法では、何回か行うと元に戻ることが知られている。さて、何回で元に戻るでしょうか。 これを計算するプログラムを作成してください。 与えられたヒント 52個の要素をもつ配列P,Qを用意します。最初は、Pi←i+1(i=0,2,3,…,51)とデータをセットします。 そして、Q2i←Pi(i=0,1,2,…,25)およびQ 2(i-26)+1←Pi(i=26,27,…,51)を行う。もし、Qの要素が 1,2,3,…,52になっていたら終了であるが、そうでなければ、P←Qを行い、同じ手順を繰り返す。 [3] 環境 [3.1] OS: Windows (cygwin使用) [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 10月27日18:00時まで [5] その他の制限: for文かwhile文でお願いします
653 名前:デフォルトの名無しさん [2008/10/24(金) 16:27:02 ] 株式会社損害保険ジャパン qb5.2ch.net/test/read.cgi/saku2ch/1185507477/ 1 名前:新甚 博史 広報室 室長代理 [HShinjin@sompo-japan.co.jp] :2007/07/27(金) 12:38 HOST:ZP144243.ppp.dion.ne.jp<8080><3128><8000><1080> 対象区分:[法人/団体]管理人裁定待ち 削除対象アドレス: www2.2ch.net/2ch.html
654 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 16:29:57 ] >>652 8回で戻ったけどあってる?
655 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 16:35:11 ] >>649 縦軸と横軸ってxyグラフ?実数と複素数? ±√abs(x)、もしくはx>=0 でxyグラフならできる。 実数と複素数でもできるけど、グラフの意味合いが違ってくるからなー。 その場合 x>0 Im=0の軸だけにプロット、 x<0 Re=0の軸だけにプロットになっちゃう。
656 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 16:54:14 ] >>652 311,875,200
657 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 17:01:32 ] >>650 ありがとうございました 横軸は自分で入れてみます >>655 xyグラフです。 abs関数って絶対値を返すんでしたっけ・・・
658 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 17:02:19 ] >>652 #include <stdio.h> int main(void) { int P[52], Q[52]; int i, c, x; for(i=0; i<52; i++) P[i] = i+1; c=0; while(1) { for(i=0; i<26; i++) Q[2*i] = P[i]; for(i=26; i<52; i++) Q[2*(i-26)+1] = P[i]; c++; for(i=x=0; i<52; i++) if(Q[i] != i+1) x=1; if(x!=0) for(i=0; i<52; i++) P[i] = Q[i]; else break; } printf("%d times looped.\n", c); } 本当は終了条件判断後の代入と最初の代入だとかを一緒にすべきだよな。でもここでは文意どおりに…。
659 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 17:02:24 ] >>652 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7843.c
660 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 17:24:05 ] >>649 #include <stdio.h> #include <math.h> #define START_X -30 #define START_Y -10 #define WIDTH 60 #define HEIGHT 20 int main(void) { int x,y,p; int max_width = START_X + WIDTH; int max_height = START_Y + HEIGHT; for(y = max_height; y > START_Y; y--) { putchar(y?'|':'0'); for(x = START_X; x < max_width; x++) { p = (int) sqrt(fabs(x)); putchar((p == abs(y))?'*':' '); } putchar('\n'); } putchar('+'); for(x = START_X; x < max_width; x++) { putchar(x?'-':'0'); } putchar('\n'); return 0; } y=±sqrt(abs(x))のグラフを書きます。 START_X=0で使ってくれ。
661 名前:デフォルトの名無しさん [2008/10/24(金) 17:42:34 ] 1] 授業単元:情報処理V [2] 問題文:JPEGファイルを読んでブロック(マーカ単位)で表示するプログラム(16進) [3] 環境 [3.1] OS:Windows(cygwin使用) [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 10月30日16:30まで [5] その他の制限:基本的な関数のみでお願いします。
662 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 18:53:17 ] >>647 丁寧な回答ありがとうございました!
663 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 20:49:17 ] >>551 のつづきです。 [1] 授業単元: 信号処理 [2] 問題文(含コード&リンク): @とAは>>551 B (平均値+5*ρ)以上の値を最大値(極大値)とするように変更させなさい。ρを標準偏差とする。 C @で読み込んだファイルの数値は周波数1,2,3,…,1024の時の値である。1024個で区切ったのはそのためである。 Bで求めた各々の最大値(極大値)の周波数を [周波数]最大値 となるようにAで出力したpeak.txtに 出力できるように変更させなさい。 例:peak.txt→ [67]3.214283 [84]2.4930390 [148]5.3485704 ・・・・ [38]3.4255342 [72]3.214283 [98]2.434924390・・・・ ・ ・ ・ [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年10月26日23:59まで [5] その他の制限: 特になし よろしくお願いします。
664 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 22:44:49 ] [1] 授業単元:if文 [2] 問題文:3つの整数を入力し,それらを比較して,大,中,小を判定しなさい. 3つの整数が同じ値の場合,あるいは2つの整数が同じ値の場合でも 正確に判定ができるように対応すること. 全ての条件を場合分けするプログラムは不可とする. できるだけ少ない条件分けで対応できるよう工夫すること。 例 9 5 2 → 大:9 中:5 小:2 例 6 6 6 → 大:6,6,6 3つの数は等しい 例 6 6 3 → 大:6,6 小:3 例 6 6 9 → 大:9 小:6,6 [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 10/30 13時 [5] その他の制限: 特になし よろしくお願いします
665 名前: ◆O2tO.pRmks mailto:sage [2008/10/25(土) 00:55:24 ] [1] 授業単元:配列 [2] 問題文:配列a[10] = {53,68,9,55,42,70,43,66,97,84}の要素の最大値・最小値・平均値を調べ、結果を表示するプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows XP [3.2] gcc [3.3] 言語:C [4] 期限:2008年10月25日まで [5] その他の制限:特になし
666 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:05:55 ] >>665 #include <stdio.h> int main(){ int a[10] = {53, 68, 9, 55, 42, 70, 43, 66, 97, 84}; int max, min, i; float ave = 0.0; max = a[0]; min = a[0]; for(i = 1; i < 10; i++){ if(max < a[i]) max = a[i]; if(min > a[i]) min = a[i]; ave += (float)a[i]; } ave /= 10.0; printf("最大値: %d\n", max); printf("最小値: %d\n", min); printf("平均値: %.1f\n", ave); }
667 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:24:51 ] >>664 #include<stdio.h> #include<stdlib.h> void main(void) { int num[3],w,cnt,i; for(cnt=0;cnt<3;cnt++) scanf("%d",&num[cnt]); for(cnt=0;cnt<2;cnt++) { for(i=cnt+1;i<3;i++) { if(num[cnt]<num[i]) { w=num[cnt]; num[cnt]=num[i]; num[i]=w; } } }
668 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:25:26 ] >>664 printf("大:%d",num[0]); if(num[0]==num[1]) printf(",%d",num[1]); else { if(num[1]==num[2]) { printf(" 小:%d,%d",num[1],num[2]); exit(0); } else printf(" 中:%d",num[1]); } if(num[0]==num[2]) printf(",%d 3つの数は等しい",num[2]); else printf(" 小:%d",num[2]); } gcc知らない…
669 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:37:48 ] >>664 #include <stdio.h> int main(){ int i, j, tmp; int count = 0; int a[3]; scanf("%d%d%d", &a[0], &a[1], &a[2]); /* 降順にソート */ for(i = 0; i < 3; i++){ for(j = i + 1; j < 3; j++){ if(a[i] < a[j]){ tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } }
670 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:38:17 ] >>664 続き /* 1個目と2個目を比較して値が違ったら「大」が決定 */ if(a[0] != a[1]){ printf("大: %d ", a[0]); /* 2個目と3個目を比較して「中・小」を決定 */ if(a[1] != a[2]) printf("中: %d 小: %d\n", a[1], a[2]); else printf("小: %d, %d\n", a[1], a[2]); } /* 1個目と2個目が一緒なら2個目と3個目を比較して「大・小」を決定 */ else{ if(a[1] != a[2]) printf("大: %d, %d 小: %d\n", a[0], a[1], a[2]); else printf("大: %d, %d, %d 3つの数は等しい\n", a[0], a[1], a[2]); } return 0; }
671 名前:669-670 mailto:sage [2008/10/25(土) 01:40:07 ] >>667-668 で既に回答出てたな・・
672 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:45:44 ] >>671 俺のは手抜きです^^;
673 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:52:31 ] >>672 結局同じようなことやってるからあまり変わらないっしょー
674 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 02:09:28 ] >>663 結局1番と2番は日本語の意味が理解できなかった。 2番は1番の意味がわかればできるけど1番は何回読んでもわからない・・・ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #define isOuter(val,ave,sd) ((val)> (ave) + 5*(var)) int main(){ FILE *fp,*fout; char buf[1024],*cp; double data[1024],ave,sum=0,sum2=0,var,sd; int cnt=0,i,k=0; if((fp = fopen("data.txt", "r")) == NULL) return 1; if((fout = fopen("peak.txt", "w")) == NULL) return 1; while((cp = fgets(buf,sizeof(buf),fp)) != NULL){ while((cp = strtok(cp," \t\r\n")) != NULL){ data[cnt] = atof(cp); sum += data[cnt]; sum2 += data[cnt]*data[cnt]; if(++cnt == 1024){ ave = sum / 1024.0; var = sum2 / 1024.0 - ave*ave; sd = sqrt(var); for(i=0;i<1024;i++) if(isOuter(data[i] , ave, sd)) fprintf(fout,"[%d]%f ", i+1,data[i]); fprintf(fout,"\n"); cnt = sum = sum2 = 0; } cp = NULL; } } fclose(fp); fclose(fout); }
675 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 04:36:38 ] >>620 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7845.txt
676 名前:675 mailto:sage [2008/10/25(土) 04:44:02 ] >>620 >>675 ミスった、スマン 一つ前の古いのをUPしてしまった… ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7846.txt
677 名前:デフォルトの名無しさん [2008/10/25(土) 05:36:07 ] [1] 授業単元:趣味プログラム [2] 問題文(含コード&リンク): sony.squares.net/dat.txt [3] 環境 [3.1] OS:WindowsVista [3.2] コンパイラ名とバージョン:最新版Cygwinのgcc [3.3] 言語:C [4] 期限: [無期限] [5] その他の制限:リンク先に記載。 重複を取り除きながらの挿入ソートでは10分経っても終わりませんでした。O(n^2) = O(366051^2) 重複を取り除きながらでも早いソートを実現したいです。お願いします。
678 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 06:28:59 ] >>677 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7847.c 条件Xってのがいまいち不明だったので手抜きで、最後に入ってる場所だけ分かる。
679 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 06:43:50 ] >>677 あれ、条件2ってどういうこと? 最大値が分かれば1から順に並べればいいってこと、、、なのか? ソートっていってるからそうじゃないような気がするんだが。
680 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 09:50:58 ] 値の範囲がわかってるなら、nが現れた行番号をその配列のn番目に入れればいいから、ソートする必要ない気がする
681 名前:デフォルトの名無しさん [2008/10/25(土) 13:10:37 ] >>678 ありがとうございます。参考にさせて貰います。 >>679-680 すいません、本来のプログラムでは未ソート時点では最大値や点の数が分かっていませんでした。
682 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 14:21:22 ] それが分かってないなら>>678 は使えないな、まさしく>>680 の手法だから 一旦二分木に移していく感じでならO(nlogn)でソートできるんじゃないかな c++のsetで試したからcのソース無いけど
683 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 15:00:23 ] Quickソートでいいんじゃない?
684 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 15:25:56 ] クイックソートしてから重複除いても>>677 でやったのよりそっちのほうが速いよね
685 名前:初心者 [2008/10/25(土) 15:26:11 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): ★下記の仕様を満たすプログラムをC言語で作成しなさい 【仕様】 表計算ソフト簡易プログラム ▽ Excelのように2次元配列で10人分の3教科の素点表示する。なお、素点は100点満点でランダムに作るものとする。 ▽ その右の列に個人別の3教科の合計・平均・順位(合計点の高い学生から順に)を表示する。なお平均は少数第1位までの表示とする。 ▽ 10人分の得点データの下の行に、合計・平均・最高点・最低点の行を作り、各行についてそれぞれ求めて表示する。 (表示例:空欄にはそれぞれ計算結果が入ることになる) 番号| 国語 数学 英語 |合計 |平均 |順位 1 | 75 35 40 | | | 2 | 69 75 82 | | | (中 略) 10 | 57 48 36 | | | --------------------------------------------------- 合計 | 平均 | 最高 | 最低 | [3] 環境 [3.1] OS: Windows xp [3.2] コンパイラ名とバージョン: 分かりません [3.3] 言語: C言語 [4] 期限: 来週中ぐらい [5] その他の制限: 繰り返し、条件処理、配列を勉強しました。 これらを使ってお願いします。 初心者なので初心者でも分かるようなプログラムを お願いします。
686 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 22:03:03 ] >>685 こんな感じでいいのか? ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7849.txt
687 名前:686 mailto:sage [2008/10/25(土) 22:07:11 ] あ、変な改行いれちまった。 79行目の最後の「\」と改行を消して80行目とつなげてくれ
688 名前:611 [2008/10/25(土) 22:32:12 ] 提示したプラグラムを補う感じで、>>611 お願いいたします。。
689 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 22:43:40 ] やだ
690 名前:デフォルトの名無しさん [2008/10/25(土) 22:49:55 ] [1]C [2]kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7850.txt [3]C言語 [4]来週の水曜 [5](2)はライブラリ関数のqsortを使うようお願いします よろしくお願いします。
691 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 01:50:39 ] C言語で長門がやってたみたいにゲームの改造とかできますか?
692 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 02:23:02 ] >>690 答え合ってるか分からん。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7852.txt
693 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 02:36:10 ] >>674 まず@番目の問題は、二次元配列で出力されている値のファイルを読み込むこと。 その値を1024個を一つのくくりとする。つまり1個目[0][1],2個目[0][2],・・・1024個目[205][3]とする。 この1024個の値の平均値と平均値から飛び出している値=最大値(極大値)を求める。 最初の1024個の最大値(極大値)を求めたら、次の1024個の最大値(極大値)を求める。 次の1024個とは1個目[206][0],2個目[206],[1],・・・,1024個目[411][3]とする。これをファイルの最後の値まで繰り返し行う。 こんな感じです。わかりやすく説明したつもりなんですけど・・・どうでしょうか? プログラムよろしくお願いします。
694 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 02:59:59 ] >>693 >1個目[0][1],2個目[0][2],・・・1024個目[205][3]とする。 なんで1024が[205][3]なの? 1024個ごとに平均値と最大値を出力すればいいのか?
695 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:00:12 ] >>691 長門裕之がゲームの改造をしていたのは知らなかったがプログラミング言語Cを用いてゲームの改造ならできるよ
696 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:02:33 ] >>694 209921行だからじゃない?
697 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:04:49 ] だけど「209921行5列」なのに「2097152個」ってなんかへんじゃね?
698 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:14:14 ] やっぱ理解できんわ
699 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:36:28 ] 実際にデータを見ると209920行なわけだが。。。
700 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:38:18 ] >>694 > 1024個ごとに平均値と最大値を出力すればいいのか? そう書いてある
701 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:43:30 ] >>693 は出題者だったか。 であれば、array[206][5]という2次元配列に読ませる必要があるのかどうかを知りたい。 別に1024個区切りで平均なり飛び出してる値なりが分かればいいんでしょ? それと、「(平均値+5*ρ)以上の値を最大値(極大値)とするように変更」という課題があるけれど、 じゃあ最初の課題では極大値の判定はどうやってやればいい?
702 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 05:09:52 ] >>611 >>688 簡易ボイヤームーア法で良ければこれで ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7853.txt 完全版はアルゴリズムが理解できん
703 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 05:18:45 ] ja.wikipedia.org/wiki/%E3%83%9C%E3%82%A4%E3%83%A4%E3%83%BC-%E3%83%A0%E3%83%BC%E3%82%A2%E6%96%87%E5%AD%97%E5%88%97%E6%A4%9C%E7%B4%A2%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0 ボイヤームーア
704 名前:デフォルトの名無しさん [2008/10/26(日) 08:49:35 ] 友達からC++のプログラムもらって家でコンパイルしたら strcpy_s()関数が使えません、という警告が出て、コンパイルが成功しませんでした。 調べてみたらstrcpy_sはstrcpyの拡張版らしくて、うちのコンパイラが若干古いので、strcpy_sは使えないみたいなんです。 それでプログラムのstrcpy_sをすべてstrcpyに置き換えたら、またエラーが出ました。 strcpy_sは引数の数が三個で、strcpyは二個なんで、その警告が出ました。 strcpy_sを、strcpyと同様の動作をさせる関数として定義すればうまくいくと思ったのですが、どのような関数を定義すればよいでしょうか。
705 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 08:53:42 ] >>704 例えば void strcpy_s(char *strDestination, size_t numberOfElements, const char *strSource) { strcpy(strDestination, strSource); } マクロでもいいと思うけど、というか、他にもいろいろ問題出てこないの?って気がしなくもない。
706 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 08:55:15 ] >>704 って糞マルチかよ。スレチだけどいいかと思って答えた俺のバカー
707 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 08:58:18 ] >>706 マルチだからといって無碍に切り捨てるのも問題かと。
708 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 09:02:56 ] マルチだと分かっていて回答するならふさわしいスレで回答できるじゃん。 今回はここかな。 pc11.2ch.net/test/read.cgi/tech/1224057986/499 宿題スレおよび以下はスレチでしょ pc11.2ch.net/test/read.cgi/tech/1224000127/681
709 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 09:53:26 ] >>708 御意
710 名前:デフォルトの名無しさん [2008/10/26(日) 11:48:59 ] コンソールからファイルを引数として渡すと、そのファイルのパーミッションと ディレクトリ種別などを取得するようにしたいです。→(例drwxr-xr-x) 以下のコードで、st_modeを8進数で表示してみたところ #include <stdio.h> #include <sys/stat.h> #include <stdlib.h> int main(int argc, char *argv[]){ struct stat abc; if(stat(argv[1], &abc)==-1){ perror("stat"); exit(EXIT_SUCCESS); } printf("%o\n", abc.st_mode); } パーミッション644のファイルが「100644」と表示されます。 これを100644の代わりに-rw-r--r--と表示するように実装するにはどのように 書けばよいか教えて下さい。宜しくお願いします。
711 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 12:07:41 ] abc.st_mode | 0777 って文字列にすんのかよ。 printf("%c" (abc.st_mode & S_ISVTX) ? 's' : '-'); printf("%c" (abc.st_mode & S_IRUSR) ? 's' : 'r'); printf("%c" (abc.st_mode & S_IWUSR) ? 's' : 'r'); printf("%c" (abc.st_mode & S_IXUSR) ? 's' : 'r'); 以下略
712 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 12:08:33 ] なんかひどいコピペミスをしたようだ。。。 printf("%c" (abc.st_mode & S_ISVTX) ? 's' : '-'); printf("%c" (abc.st_mode & S_IRUSR) ? 'r' : '-'); printf("%c" (abc.st_mode & S_IWUSR) ? 'w' : '-'); printf("%c" (abc.st_mode & S_IXUSR) ? 'x' : '-'); 以下略
713 名前:デフォルトの名無しさん [2008/10/26(日) 12:17:48 ] printfよりもputcharがよくね?
714 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 12:31:30 ] そだね。putcharの方がよかた。 っていうかカンマも抜けてるし何このグダグダ感orz
715 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 12:32:45 ] ('ー')
716 名前:デフォルトの名無しさん [2008/10/26(日) 12:41:28 ] >>712 出来ました。ありがとうございます。 ちなみにディレクトリがdでなく-になってしまうのですがまだ他に 何か必要でしょうか?
717 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 12:52:23 ] 横から口だし失礼 ボイヤームーアってどのくらい速いんですか? ソートの種類で例えるとどのソートに匹敵する実用的なアルゴリズムなんでしょうか?
718 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 12:54:30 ] >>717 つ www.google.co.jp/
719 名前:デフォルトの名無しさん [2008/10/26(日) 12:59:00 ] setuidbit, setgidbit, stickybitなどを考慮するともっとひどいコードに。
720 名前:デフォルトの名無しさん [2008/10/26(日) 13:10:37 ] Visual Studio使ってる人ってVisual C++ Express Edition ?
721 名前:デフォルトの名無しさん [2008/10/26(日) 13:10:49 ] >>719 なるほど。あんまし大変になりそうであればとりあえずこんな感じで十分 なのでいいです。ありがとうございました。
722 名前:デフォルトの名無しさん [2008/10/26(日) 14:02:41 ] [1] 授業単元:構造体 [2] 問題文:1,名簿ファイルを読み込み、生年月日の順に並べる、苗字の順に並べる、名前の順に並べる、mail addressの順に並べるプログラムを作れ。ただし、文字列の大小を比較する関数として、strcmpを用いよ。 #include <string.h> int strcmp(char str1, char str2); ------------------------ str1>str2 → 0より小さな整数 ,str1==str2 → 0 ,str1<str2 → 0より大きい整数 関数 void SortData1(struct person *person, int *index, int n); /* 生年月日の順番に並べる */ 関数 void SortData2(struct person *person, int *index, int n); /* 名の順番に並べる */ 関数 void SortData3(struct person *person, int *index, int n); /* 姓の順番に並べる */ 関数 void SortData4(struct person *person, int *index, int n); /* mail-addressの順番に並べる */ をそれぞれ作り、 結果を表示せよ。 2,県の郵便番号のリスト(メンバーの数約5000個)を配列の大きさだけを変えて、これを郵便番号順、読み仮名順に並べ替えるプログラムを作れ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年10月27日16:00まで [5] その他の制限:1の関数の宣言は以下のようにする。 関数 void ReadData(struct person *person, int *index, int *n); 関数 void PrintData(struct person *person, int *index, int n); 関数ReadData、PrintDataでは、 while(scanf(“%d %s %s %s %s”,&person[i].birth, person[i].first_name, person[i],last_name, person[i].mail_addr, person[i].thema)!=EOF){ index[i]=i; i++; } ------------------------------------------------------------- for(i=0;i<n;i++){ printf(“%d %s %s %s %s\n”,person[index[i]].birth, person[index[i]].first_name, person[index[i]].last_name, person[index[i]].mail_addr,person[index[i]].thema); } とりあえず、問題1の並び替えがうまく出来ませんorz お願いします。
723 名前:デフォルトの名無しさん [2008/10/26(日) 14:09:02 ] [1] 授業単元:プログラミング [2] 問題文: Newton--Raphson法を用いて X*X*X-7X*X+16X-10=0 の解を求めよ。 [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:10/24 [5] その他の制限:初心者です。なるべく基本的な構造でお願いします。 >>474 以前お願いしたのですがうまくいきません。どなたか問題点を指摘 していただきたいです。また初歩的な30行程度のプログラムにしたいと 思っています。
724 名前: ◆1xFXRhO/iQ mailto:sage [2008/10/26(日) 14:26:39 ] [1] 授業単元:離散数学 [2] 問題文(含コード&リンク): 重みつき無向グラフを隣接行列で表現し、縮約を行うプログラムを実装せよ。 [3] 環境 [3.1] OS: (Linux) [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年10月30日まで [5] その他の制限: 期限が近めですが、なんとか、宜しくお願いします。
725 名前:デフォルトの名無しさん [2008/10/26(日) 14:29:14 ] >>723 #include <stdio.h> #include <math.h> #define EPS0 1.0e-5 double fnc(double x); double dfnc(double x); main() { double x0, x1; x0 = 0; x1 = 10; while(fabs(x1 - x0) > EPS0) { x0 = x1; x1 = x0 - fnc(x0)/dfnc(x0); } printf("x = %lf\n", x1); } double fnc(double x) { return x*x*x - 7*x*x + 16*x - 10; } double dfnc(double x) { return 3*x*x - 14*x + 16; }
726 名前:デフォルトの名無しさん [2008/10/26(日) 14:36:19 ] >>725 ありがとうございます。ものすごく早い回答がいただけて とてもうれしいです。早速じっこうしてみましたが「関数の 値を返すべき」という警告がでるのでぜひ解除して いただきたいです。本当にお願いします。
727 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 14:38:31 ] >>726 main()の最後に return 0; を付ければいい
728 名前:デフォルトの名無しさん [2008/10/26(日) 14:42:17 ] CodeGear C++ 5.92 for Win32 Copyright (c) 1993, 2007 Code kadai5z.c: 警告 W8070 kadai5z.c 20: 関数は値を返すべき(関数 main ) 警告 W8066 kadai5z.c 30: 実行されないコード(関数 dfnc ) エラー E2378 kadai5z.c 31: Return文に ; がない(関数 dfnc *** コンパイル中に 1 個のエラーが発生しました *** このような表示になります。
729 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 14:49:47 ] 縮約のアルゴリズムってこんな感じ?面倒だから実装はしないけど 縮約関数: func(G, v, w) 意味: グラフGに於ける点(v,w)で結ばれる辺を縮約する 仕様: グラフGに於ける点wを削除し、点wに接続する全有向辺を点vに接続し直す(有向辺を追加する) ただし、重複している場合は追加しない (点wを削除するためには、新規にグラフG’を作成?)
730 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 14:51:18 ] 辺v,wの削除も
731 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 14:51:36 ] hairanai
732 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 14:52:48 ] 無向グラフだ
733 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 15:29:11 ] [1] 授業単元:プログラミング [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7855.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:10/27 [5] その他の制限:途中まで作成はしたのですが上手くいきません。 よろしくお願いします。
734 名前:デフォルトの名無しさん [2008/10/26(日) 15:40:32 ] >>733 #include<stdio.h> #define N 100 main() { int t; double a, x[N+1]; printf("成長パラメーターの入力"); scanf("%lf", &a); x[0] = 0.5; for (t=0;t<=N-1;t++) { x[t+1] = a * x[t] * (1.0 - x[t]); } for (t=0;t<=N;t++) printf("t=%dのとき人口は%lgです。\n",t,x[t]); return 0; }
735 名前:724 ◆1xFXRhO/iQ mailto:sage [2008/10/26(日) 15:42:27 ] >>729 はい、ただ重複している場合は追加しないのではなく、 重みを足す事になっています。 なんとか、実装して頂けると嬉しいです。。
736 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:07:21 ] >>735 やってみる
737 名前:724 ◆1xFXRhO/iQ mailto:sage [2008/10/26(日) 16:21:56 ] >>736 ありがとうございます!
738 名前:デフォルトの名無しさん [2008/10/26(日) 16:38:30 ] [1] 授業単元:プログラミング [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7856.txt [3] 環境 [3.1] OS:MacOSX→Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:10/28 [5] その他の制限: 初心者ながらいろんなところでヘルプを得ながら必死に 書き上げたのですが、実はMacOSX上でしか動作しないことがわかりました。 Linux上でコンパイルするとエラーになってしまいもはやデバッグのしようが わかりません。Linux上での動作が条件なので書き直したいのですが、どなたか 助けてください。
739 名前:デフォルトの名無しさん [2008/10/26(日) 16:47:47 ] >>738 NetBSDでも動作するよ。
740 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:48:10 ] >>738 linuxでも動いた。 コンパイルするシステムのヘッダファイルとかそういうの次第。
741 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:56:58 ] [1] 授業単元: アルゴリズムとデータ構造 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7857.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年10月27日10:00
742 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:59:28 ] [1] 授業単元:C言語 「分野:ポインタ演習」 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=7744 の7858.txtです。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:08年10月27日24:00まで [5] その他の制限:お手数ですが、C言語の基本的な関数のみでお願いします。
743 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:59:33 ] >>737 出来た。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7860.txt
744 名前:デフォルトの名無しさん [2008/10/26(日) 17:10:49 ] >>742 #include <stdlib.h> #include <stdio.h> #include <memory.h> double horner(double x, double *a, int n); main() { int i, n; double x, *a; printf("Horner の方法で多項式を計算します!\n"); printf("次数n を入力して下さい:"); scanf("%d", &n); a = (double*)malloc(sizeof(double) * (n + 1)); printf("実数係数を順に入力して下さい:\n"); for(i = n; i >= 0; i--){ printf("a[%d] = ", i); scanf("%lf", &a[i]); } printf("x の値を入力して下さい:"); scanf("%lf", &x); printf("多項式の値 = %lg\n", horner(x, a, n)); free(a); return 0; } double horner(double x, double *a, int n) { if (n == 0) return a[0]; return x * horner(x, a + 1, n - 1) + a[0]; }
745 名前:724 ◆1xFXRhO/iQ mailto:sage [2008/10/26(日) 17:27:55 ] >>743 こんなに早く出来るなんて、思ってませんでした。。 本当にありがとうございました!
746 名前:デフォルトの名無しさん [2008/10/26(日) 17:45:25 ] >>739 >>740 そうですか。確認有り難うございました。ある特定のLinuxの環境での実行が条件 なので、とにかくそこの環境でコンパイルしたいのですが、以下のエラーって どう変えればいいかとかわかったりしますでしょうか?エラーになる環境がないと 難しいかも知れませんが。。(エラーになるLinuxの環境が何のディストリビューション かもわからず、すみません。Linuxクラスタだとか聞きましたが) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7861.txt
747 名前:デフォルトの名無しさん [2008/10/26(日) 17:49:18 ] >>746 #include <unistd.h>
748 名前:デフォルトの名無しさん [2008/10/26(日) 17:54:21 ] 鼻血が止まらん
749 名前:デフォルトの名無しさん [2008/10/26(日) 17:54:44 ] すまん。誤爆だ。
750 名前:デフォルトの名無しさん [2008/10/26(日) 17:57:50 ] >>747 ありがとうございます。追加しましたが、どうやらエラーは変わらないようです
751 名前:デフォルトの名無しさん [2008/10/26(日) 18:11:45 ] >>750 ディストロがわからないのはつらいね。 #include <sys/types.h> では?
752 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 18:15:28 ] 自分が今使ってるOSがなんだか分からんの?
753 名前:デフォルトの名無しさん [2008/10/26(日) 18:27:04 ] >>751 有り難うございました。半分くらい減りました。残るエラーはこちらです↓ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7862.txt >>752 すみません、自分の管理している環境じゃないもので、テルネットして実行しています。 uname -aは打てますが、これが有益な情報かどうか不明です。。 (ちなみに打ったところ最後がi686 GNU/Linuxとなってました。)
754 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 18:55:06 ] >>753 その uname -a 結果ください。
755 名前:デフォルトの名無しさん [2008/10/26(日) 19:04:56 ] >>754 Linux XXXX 2.6.18-6-686-bigmem #1 SMP MM DD hh:mm:ss 2008 i686 GNU/Linux と出ました。 それとぐぐって出て来たヘッダファイル(fcntl.hとか)を適当に追加しましたが駄目でした。 S_IFMT, S_IFBLKとかって何に定義されてるんでしょうか
756 名前:デフォルトの名無しさん [2008/10/26(日) 19:06:19 ] すみません。Debian。ですかね。
757 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 19:09:50 ] >>734 ありがとうございました!
758 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 19:17:16 ] [1] 授業単元:プログラミング [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7863.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:10/27 [5] その他の制限:式の部分が上手くいきません。 よろしくお願いします。
759 名前:デフォルトの名無しさん [2008/10/26(日) 19:38:23 ] こうやって見ると数式のプログラムばかりだね 理学部やならいいけど、工学部情報学科ならば実務とはかけ離れてるのも大概にしろと
760 名前:デフォルトの名無しさん [2008/10/26(日) 19:38:56 ] プログラム演習は数式遊びの場じゃない
761 名前:デフォルトの名無しさん [2008/10/26(日) 19:40:09 ] 東大のプログラムの授業なんかは ユニックスのパイプコマンドを作成しろとか サーバー通信なんちゃらの実務的なのが多い
762 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:03:15 ] >>761 東大じゃありませんが、1990年ごろの情報系学部演習ですでに、 ごく簡単なシェル/パイプを実装, (fork() +exec*()+pipe()) をやっていました。シグナルとかセマフォとかも。無論、当時の私には極悪・試行錯誤の連続で泊り込む勢いでした。 バークレーソケットは3年次後半でしました。 それはそうと、ロジスティック方程式を解いて(がんばれば高校数学でできます。)解析解に代入する、とかはどうでしょう。やっぱりだめですか。 つja.wikipedia.org/wiki/%E3%83%AD%E3%82%B8%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E6%96%B9%E7%A8%8B%E5%BC%8F 数値解析部門は、それはそれで習得しなければならないと思います。
763 名前:デフォルトの名無しさん [2008/10/26(日) 20:17:24 ] MATLBAでやったら全部一発
764 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:34:52 ] >>755 私の環境は WindowsXP/cygwin なんですが、エラーはでませんでした。(警告によるとキャストが必要なものはありましたが、まあ問題ない) さて、S_* などは、私の環境では sys/stat.h にあるのですが、(実体は /usr/include/sys/stat.h) >>755 さんの環境でも、 インクルードファイルをみつけているようですね。(インクルードパスがちがっておれば、みつけられない、ってでてくると思います。) すると、暗黙の #define が unix(posix) 用になっていないのかもしれません。 gcc -v ソース.c 2> mes.txt として、mes.txt の内容をください。 2> がうまくいかないのであれば、その旨書き込んでください。
765 名前:デフォルトの名無しさん [2008/10/26(日) 20:56:37 ] >>764 レス有り難うございます。mes.txtをアップ致しました。 thread modelというのはposixになっているようですが。。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7864.txt
766 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:27:10 ] >>765 では、 gcc -Dunix -v ソース.c 2> mes2.txt の結果をください。 /usr/include/sys/stat.h の内容もください。 そ れ と、 このソースファイルをコンパイルしたいな、と思った動機を教えてください。というか白状してください。(笑) もし演習の課題ならば、コンパイルできない、という事態に陥らないよう、教官がいろいろ陰で配慮してくださるはず。 うまくいかないのは、課題を出した教官が怠慢だったのか、ということもあるかもしれませんが、 私の見るところ、自主的に今ある環境で自分のやりたいことをやってみた、という気がします。 その意気やよし! 最後まで付き合います。ただし今日は徹夜を覚悟してください。
767 名前:デフォルトの名無しさん [2008/10/26(日) 21:40:07 ] [1] 授業単元:データ構造とアルゴリズム演習 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7865.txt [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 10月28日まで [5] その他の制限: 特になし よろしくお願いします
768 名前:デフォルトの名無しさん [2008/10/26(日) 21:50:29 ] >>766 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7866.txt kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7867.txt アップ致しました。本当に課題です。文系なのに間違って海外の理系の学校に 来てしまい毎日半端ない宿題に追われているところです。なので、自主的に、 といいたいところですが今はとにかくコンパイルすることしか頭にありません。。 助けばかり乞うのは自分のためによくないのですが最近はあまりに半端ない分量の ため依存率が高くなってきました。
769 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:06:22 ] >>768 なんだか、教官が手抜きなんですねぇ。それは大変。 では、 gcc -v -D__USE_BSD -v ソース.c 2> mes3.txt として mes3.txt の内容をください。 あと、コンパイルできたかどうか、コンパイルできたのなら実行結果 (おそらくは ./a.out . > mes4.txt として mes4.txt に結果が入ると思います。) を教えて下さい。 あるいは教官に「コンパイルできないよ!」と主張してください。(そちらは昼ですか?) 30分後にのぞきます。
770 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:11:05 ] >>767 1-1: struct cell *cell2 = cell1->next; struct cell *cell3 = cell2->next; printf("%d\n%d\n%d\n", cell1->element, cell2->element, cell3->element); 1-2: struct cell *c; for (c = cell1; c != NULL; c = c->next) { printf("%d\n", c->element); }
771 名前:デフォルトの名無しさん [2008/10/26(日) 22:18:55 ] >>769 原因が判明しました。怒らないで下さい。いつもメイクファイルを使用しているのですが、 常にgccのオプションは-Wall -std=c99としています。先程たまたま-std=c99を取ったらコンパイル 出来てしまいました!(なんでMacの環境だと同じメイクファイルでエラーにならないんだろう。。) なぜかの原因究明はもう辞めて寝ます。徹夜したところなので。。ちなみに教官にMac OSXの環境で つくったからこれで勘弁して!って言ったら駄目だと言われました。厳しい世の中ですね。 色々とサポート有り難うございました。 以上
772 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:19:20 ] 2-1: void append(struct cell **cell1, int e) { struct cell *cell2 = (*cell1)->next; (*cell1)->next = malloc(sizeof(struct cell)); (*cell1)->next->element = e; (*cell1)->next->next = cell2; } 2-2: void prepend(struct cell **cell1, int e) { struct cell *cell0 = malloc(sizeof(struct cell)); cell0->element = e; cell0->next = *cell1; *cell1 = cell0; } 使い方: append(&cell1, /* 新しい element */) prepend(&cell1, /* 新しい element */)
773 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:45:12 ] >>771 んー、それはそれで謎なんですが‥‥‥。 -std=c99 は、直近のCの規格でコンパイルする、ということでしかないので、今回は特に影響がないはず。 c99とすると、でインクルードするヘッダがかわるのでしょうか?c++ 風に <iostream> と.h がない書き方にしないといけないのでしょうか?よくわかりません。 このあたりは識者からのコメントをお待ちいたします。 実行結果を教えてくださるとありがたいです。ともあれ、おやすみなさい。
774 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:03:46 ] gccの場合、-std使うとたしかそれに合わせて標準のヘッダの中身も 変化する(#ifdefなどを使って)から、その影響はあると思う。
775 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:06:18 ] [1] 授業単元:Cプロギラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイルを参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_auxに含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:inux [3.2] コンパイラ名とバージョン:gc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
776 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:10:01 ] >>666 遅れましたが、ありがとうございました。
777 名前: ◆ojvIN3PEqY [2008/10/26(日) 23:31:37 ] [1] 授業単元:プログラミング [2] 問題文:ビットマップディスプレイの原理を用いて、入力した整数(0〜1000000)を、ビットマップ式に表示するプログラムをつくれ。 例 357111 *** *** *** * * * * * * * * * *** *** * * * * * * * * * * *** *** * * * * [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年10月27日まで [5] その他の制限:配列の基礎まで習いました。 お願いいたします
778 名前: ◆ojvIN3PEqY [2008/10/26(日) 23:33:36 ] 例がおかしくなってしまったので無視してください(*_*)
779 名前:デフォルトの名無しさん [2008/10/26(日) 23:40:11 ] [1] 授業単元:ハードウェア設計 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7844.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限: 10月28日まで [5] その他の制限: 特になし よろしくお願いします。
780 名前:775 mailto:sage [2008/10/26(日) 23:43:32 ] 問題文に間違いがあったので修正します。 [1] 授業単元:Cプロギラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイルを参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_auxに含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:inux [3.2] コンパイラ名とバージョン:gc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
781 名前:デフォルトの名無しさん [2008/10/26(日) 23:44:21 ] >>777 #include <stdio.h> #include <stdlib.h> int main() { char s[81]; int i = 357111; sprintf(s, "banner %d", i); return system(s); }
782 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:48:42 ] >>774 んー、では 64bit がらみですか?それとも <sys/stat.h> の内容が変わったのか? ちょっと調べてみましたが、最近は stat(2) 返り値の st_mode の判別方法として、 if (S_ISBLK(infobuf.st_mode)) printf("block device.\n"); というマクロが定義されているようですね。 私は、 if ((infobuf.st_mode & S_IFMT) == S_IFBLK) printf("block device.\n"); しかしらなかったのですが。 ひきつづき識者のコメントをいただけたら、と思います。
783 名前:デフォルトの名無しさん [2008/10/27(月) 00:09:30 ] 基本情報スレからきました
784 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:17:26 ] >>777 #include<stdio.h> #include<string.h> // memset #define WIDTH (4*7) #define HEIGHT (5) void numset(char screen[HEIGHT][WIDTH], int x, int y, int num){ static const char font[][4*10+1]={ // 0123456789 の順に 3x5 で文字+数字間と末尾に一文字空白入れる "*** * *** *** * * *** *** *** *** *** ", "* * * * * * * * * * * * * * ", "* * * *** *** *** *** *** * *** *** ", "* * * * * * * * * * * * * ", "*** * *** *** * *** *** * *** *** ", }; int ix, iy; for(iy=0;iy<5;iy++) for(ix=0;ix<4;ix++) screen[y+iy][x+ix]=font[iy][num*4+ix]; } void display_number(long value){ char screen[HEIGHT][WIDTH]; long div, x, y=0; if(value<0 || value>1000000) return; memset(screen, '\0', sizeof(screen)); for(div=1;value/div>=10;div*=10); for(x=0;div>0;div/=10,x+=4) numset(screen, x, y, (value/div)%10); for(y=0;y<HEIGHT;y++) printf("%s\n", screen[y]); } int main(int argc, char *argv[]){ int num=123456; if(argc==2) sscanf(argv[1], "%d", &num); display_number(num); return 0; }
785 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:37:21 ] >>782 ヘッダ見ればいいんじゃ、とおもうんだけど。。。
786 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:50:25 ] 円周率3より悲惨な事実w 572 名前:名無し検定1級さん 投稿日:2008/10/27(月) 00:48:29 と思ったけど、今の大学3年以下のゆとり教育課程では 方程式を高校で初めて学ぶんだったねw ありえんwww 複素数無くなったしw
787 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:53:46 ] 二次方程式 / 複素数平面 じゃないかね
788 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:54:39 ] >>779 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7869.txt 問題2についてはなんか違う気もするけど仕様を満たせばいいかな。 gccでコンパイルできるかなぁ
789 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:58:40 ] 1, 1,2, 3,2,1, 1,2,3,4, 5,4,3,2,1, . . . これらの規則的な数字を配列のvd[1〜100]に順番に入れていきたいんですけどどうしたらいいでしょう。 あとその反対の 1, 2,1, 1,2,3, 4,3,2,1, 1,2,3,4,5, . . . をvm[1〜100]に順番に入れたいのですが、 ループさせてうまく配列に入れられないでしょうか。 わかるかた教えてください。 お願いします。
790 名前:デフォルトの名無しさん [2008/10/27(月) 01:07:17 ] [1] 授業単元:構造体 [2] 問題文:1,名簿ファイルを読み込み、生年月日の順に並べる、苗字の順に並べる、名前の順に並べる、mail addressの順に並べるプログラムを作れ。ただし、文字列の大小を比較する関数として、strcmpを用いよ。 #include <string.h> int strcmp(char str1, char str2); ------------------------ str1>str2 → 0より小さな整数 ,str1==str2 → 0 ,str1<str2 → 0より大きい整数 関数 void SortData1(struct person *person, int *index, int n); /* 生年月日の順番に並べる */ 関数 void SortData2(struct person *person, int *index, int n); /* 名の順番に並べる */ 関数 void SortData3(struct person *person, int *index, int n); /* 姓の順番に並べる */ 関数 void SortData4(struct person *person, int *index, int n); /* mail-addressの順番に並べる */ をそれぞれ作り、 結果を表示せよ。 2,県の郵便番号のリスト(メンバーの数約5000個)を配列の大きさだけを変えて、これを郵便番号順、読み仮名順に並べ替えるプログラムを作れ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年10月27日16:00まで [5] その他の制限:1の関数の宣言は以下のようにする。 関数 void ReadData(struct person *person, int *index, int *n); 関数 void PrintData(struct person *person, int *index, int n); 関数ReadData、PrintDataでは、 while(scanf(“%d %s %s %s %s”,&person[i].birth, person[i].first_name, person[i],last_name, person[i].mail_addr, person[i].thema)!=EOF){ index[i]=i; i++; } ------------------------------------------------------------- for(i=0;i<n;i++){ printf(“%d %s %s %s %s\n”,person[index[i]].birth, person[index[i]].first_name, person[index[i]].last_name, person[index[i]].mail_addr,person[index[i]].thema); } とりあえず、問題1の並び替えがうまく出来ませんorz お願いします。
791 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:08:57 ] >>787 もちろん一次のこと さらに複素数も無限級数もやらなくなった
792 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:09:34 ] IT業界だけじゃないけど、これから日本のエンジニアは大変なことになる 大量に採用するなら今年までにしとけ 再来年からはヤバイ奴らが入社してくるぞww
793 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:10:28 ] >>790 名簿ファイル下さい
794 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:13:49 ] >>791 んじゃ中学で何習うのorz
795 名前:デフォルトの名無しさん [2008/10/27(月) 01:24:26 ] >>793 名簿ファイルはリアルに教授の名前載ってるから、あげるの無理なんです すみません
796 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:25:49 ] >>795 せめて構造体の中身教えてな themaには何が入ってるんだ? 研究テーマか何かか?
797 名前:775 mailto:sage [2008/10/27(月) 01:26:48 ] >>780 をお願いします。
798 名前:デフォルトの名無しさん [2008/10/27(月) 01:37:20 ] >>796 名簿はこんな感じ 19670712 namae a aaaaaa@xxx.aaaaaa.ac.jp Uchu 19790102 namae b bbbbbb@xxx.bbbbbb.ac.jp Kotaidenshi 19300303 namae c cccccc@xxx.cccccc.ac.jp Uchu ---------------------------------------------------- themaには研究テーマが入ってます 宜しくお願いします
799 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 02:27:33 ] [1] 授業単元:プログラミング [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7863.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:10/27 [5] その他の制限:何度もすいません・・・ 式がやはりネックです
800 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 02:38:23 ] >>701 >別に1024個区切りで平均なり飛び出してる値なりが分かればいいんでしょ? そういうことです。 >「(平均値+5*ρ)以上の値を最大値(極大値)とするように変更」という課題があるけれど、 じゃあ最初の課題では極大値の判定はどうやってやればいい? 平均値以上の値を最大値(極大値)としなきゃいけないんですOTL
801 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 03:00:37 ] >>790 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7870.txt とりあえず、1番だけ。 2番は問題の意味がよくわからない。 もっと詳しく書いてくれ。 必要なデータとかあればそれもよろしく。 今日はもう寝る。
802 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 03:17:59 ] >>663 問題修正 [1] 授業単元: 信号処理 [2] 問題文(含コード&リンク): @ 5行209921列の2次元配列のファイルを読み込みなさい。ファイルの値を1024個で区切り1024個中の値の平均値と(平均値+5*ρ)以上の値を最大値(極大値)を求めなさい。ρを標準偏差とする。 最大値をmax1、max2、max3、・・・・として最大値は1個とは限らないこととする。 また1024個の最大値を求め終わったら、次の1024個の最大値を求めなさい。この作業をファイルの最後の値までやりなさい。 ただし、ファイルのサイズは17.2MBととし十分なメモリ領域を確保すること。 ヒント:malloc関数 ※ファイル↓(17MBもあるのでDLするのに時間がかかるかもしれません。お手数かけます。) kissho6.xii.jp/14/src/1yon14506.zip.html DLKey:data A 求めた最大値をpeak.txtに出力しなさい。1行目を最初の1024個中で求めた最大値を表示させ、2行目からは次の1024個中から求めた最大値を表示させなさい。 B @で読み込んだファイルの数値は周波数1,2,3,…,1024の時の値である。1024個で区切ったのはそのためである。 @で求めた各々の最大値の周波数を [周波数]最大値 となるようにAで出力したpeak.txtに出力できるように変更させなさい。 例:peak.txt→ [67]3.214283 [84]2.4930390 [148]5.3485704 ・・・・ [38]3.4255342 [72]3.214283 [98]2.434924390・・・・ ・ ・ ・ [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年10月27日午後5時 [5] その他の制限: 特になし よろしくお願いします。
803 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 03:20:10 ] >>802 補足説明 まず@番目の問題は、二次元配列で出力されている値のファイルを読み込むこと。 その値を1024個を一つのくくりとする。つまり1個目[0][0],2個目[0][1],・・・,5個目[0][4],6個目[1][0],・・・,1024個目[205][3]とする。このとき個数=周波数の値でもある。 この1024個の値の平均値と最大値(極大値)を求める。 最初の1024個の最大値(極大値)を求めたら、次の1024個の最大値(極大値)を求める。 次の1024個とは1個目[206][0],2個目[206],[1],・・・,1024個目[411][3]とする。これをファイルの最後の値まで繰り返し行う。 よろしくお願いします。
804 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 03:57:31 ] [1] 授業単元:配列 [2] 問題文:10人分の2科目の試験得点(100点満点)を2次元配列に初期化しておく。2次元配列vの宣言と初期化は以下のとおり int v[2][10]={{55,67,45,78,89,91,73,50,80,69} {44,59,87,92,60,51,77,89,64,53}}; この10人分の科目別得点の平均を求めなさい。ただし、2科目の科目別平均は次の1次元配列に格納する。 double mean[2] doubleという型名で配列の名前がmean 《実行結果》 科目1の平均=69.700000 科目2の平均=67.600000 [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:10/27 午後1時 [5] その他の制限:出来るだけ短く どうかよろしくお願いします
805 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 03:57:47 ] >>785 そう、だから >>768 で sys/stat.h を貼ってもらって、それをみたんですが、 くだんの#define は #if defined __USE_BSD || defined __USE_MISC || defined __USE_XOPEN の下で定義されていました。 mac osx = darwin ≒ FreeBSD+mach? であっても、 -std=c99 とすると、この上のどれも #define されず、 それでいて-std= を指定しなければ、この上のどれかが #define される ということ、かつ >>774 より-std で#define の内容がかわる、ということですから、そんなことがあっても不思議でない、ということです。 単にそれだけですが。
806 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 04:19:58 ] >>805 失礼。認識間違いしていました。 >>768 の環境では__USE_BSD も __USE_MISC も __USE_XOPEN もどれも #define されないようですね。 でも手元のVine Linux 4.2 では __USE_BSD と __USE_MISC が #define されています。(#error で確認) したがって >>768 の環境に問題があるのでしょうか。debian な人にお願いするしかないですね。
807 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 04:24:18 ] >>806 手元の Vine Linux 4.2 で -std=c99 をコンパイルすると、>>768 と同じ現象が再現しました。 じゃ、いったいなにが #define されているのでしょうか‥‥‥。
808 名前:デフォルトの名無しさん [2008/10/27(月) 08:13:30 ] 【質問テンプレ】 [1] 構造体: [2] 英文なので翻訳します。 この宿題の中で、僕はFieldとScreenという2つのクラスを持っています。 Screen というクラスはField というクラスを80個持ちます。 で、問題はここからなのですが 教授は「Screenが無制限にFieldを持つようにプログラムを作れば、ボーナス点をやる」 とか言いだしたのでどうやるか教えてください。 [3] 環境 [3.1] うぃんどーず [3.2] ぼーらんど [3.3] C++ [4] 一週間後 [5] 制限:new とか使う感じです。
809 名前:デフォルトの名無しさん [2008/10/27(月) 08:13:42 ] >>801 ありがとうございます 問題2は 郵便番号 区(漢字で) 町(カタカナで) 町(漢字で) の順に並んだ名簿のファイルを読み込んで並び変えます
810 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 08:21:13 ] >>808 [3] 環境 [3.1] うぃんどーず [3.2] ぼーらんど Windowsもborlandも読めないだろうと馬鹿にしてるんだな
811 名前:デフォルトの名無しさん [2008/10/27(月) 08:28:46 ] >>810 いやwwwwwそういうわけじゃないです。。。 教えてくださいお願いします!
812 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 08:56:43 ] >>808 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7871.txt std::vectorを使ったがnew/deleteでも同じようにいけるはず 誰かに任せた
813 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 08:57:50 ] #include <iterator> #include <functional> は不要なので削除して下さい
814 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 08:59:31 ] >>789 int i, j, k, flag, vm[100]; for(i=1,k=0,flag=1; flag; i++) { for(j=1; j<2*i-1 && flag; j++) { vm[k++] = j; if(k==100) flag = 0; } for(; j>0 && flag; j--) { vm[k++] = j; if(k==100) flag = 0; } } 下の場合は for(j=1; j<2*i&& flag ; j++) {
815 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 09:07:36 ] >>812 ありがとうございます。 でもnew/delete使う感じでお願いしたいんです。 vectorが何のこっちゃ分かりません。すみません・・・
816 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 09:09:19 ] [1] 授業単元: 配列 [2] 問題文(含コード&リンク) 身長について処理をするプログラムの作成 最大20とする整数nをキーボードから入力する。 次に、n人分の実数(身長)をキーボードから入力しその平均身長をもとめ、 さらにそのそれぞれの人の身長と、平均身長との差を一人一行ずつ出力しなさい。 小数点以下は無視していい。 例) n=3の場合 170.0 0.0 165.0 -5.0 175.0 5.0 [3] Windows VC 6.0 言語:C++ [4] 期限:今日中 [5] その他の制限:特になし c言語を侮っていてさぼり気味だったつけがまわり、気がついたら全くわからなくなってました。 ヒントだけでもいいのでどうかお願いします。
817 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 09:20:11 ] >>815 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7872.txt わかるかな?これ以上簡単に書けんよ
818 名前:デフォルトの名無しさん [2008/10/27(月) 09:24:37 ] >>817 ありがとうございます!
819 名前:デフォルトの名無しさん [2008/10/27(月) 09:49:54 ] [1] 授業単元: プログラミング基礎 [2] 問題文: ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7873.txt [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Visual Studio 2005 [3.3] 言語: C [4] 期限: 10月27日 21:00まで よろしくお願いします
820 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 10:20:56 ] pc11.2ch.net/test/read.cgi/gamedev/1217601153/ Syntax Error. しかしらないキチガイが現れました
821 名前:デフォルトの名無しさん [2008/10/27(月) 10:26:09 ] >>816 #include <stdio.h> int main(void) { int i, n; int sincho[20]; int sum, heikin; printf("n? "); scanf("%d", &n); if (n >= 20) { printf("nが大きすぎます。\n"); return 1; } for(i = 0; i < n; i++) { printf("%d人目の身長: ", i+1); scanf("%d", &sincho[i]); } sum = sincho[0]; for(i = 1; i < n; i++) { sum += sincho[i]; } heikin = sum / n; for(i = 0; i < n; i++) { printf("%d %d\n", sincho[i], sincho[i] - heikin); } return 0; }
822 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 10:31:06 ] >>816 #include <stdio.h> int main(int argc, char *argv[]) { double height[20], sum, avg; int n, i; printf("n の値を入力してください: "); scanf("%d%*[^\n]", &n); if (n > 20) { puts("大きすぎます"); return 1; } sum = 0.0; for (i = 0; i < n; i++) { printf("身長を入力してください: "); scanf("%lf%*[^\n]", &height[i]); sum += height[i]; } avg = sum / n; for (i = 0; i < n; i++) { printf("%.1f %.1f\n", height[i], height[i] - avg); } return 0; }
823 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 10:32:36 ] >>819 #include<stdio.h> int main(void){ char str[100],big[100]; int i,k; printf("文字列を入力して下さい:"); scanf("%s",str); k=0; for(i=0; str[i]!='\0'; i++){ switch(str[i]){ case 'a': case 'i': case 'u': case 'e': case 'o':continue; default:{big[k]=str[i]-32; k++; } } } big[k]='\0'; printf("入力:%s\n",str); printf("出力:%s\n",big); }
824 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 10:34:06 ] 忘れた return 0;
825 名前:デフォルトの名無しさん [2008/10/27(月) 10:35:03 ] #include <stdio.h> int main(void){ char str[100],big[100]; int i, j; printf("文字列を入力して下さい:"); scanf("%s",str); for(i=0, j=0; str[i]!='\0'; i++){ if (str[i]>='a' && str[i]<='z'){ big[j]=str[i]-('a'-'A'); if (big[j] == 'A' || big[j] == 'I' || big[j] == 'U' || big[j] == 'E' || big[j] == 'O') { ; }else j++; }else if (str[i] == 'A' || str[i] == 'I' || str[i] == 'U' || str[i] == 'E' || str[i] == 'O') { ; }else { big[j] = str[i]; j++; } } big[j]='\0'; printf("入力:%s\n",str); printf("出力:%s\n",big); return 0; }
826 名前:デフォルトの名無しさん [2008/10/27(月) 11:38:02 ] >>788 さん ありがとうございます! 大変助かりました!
827 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 12:27:23 ] >>820 = ID:FJ+86jwr ? 数字も読めないのか
828 名前:デフォルトの名無しさん [2008/10/27(月) 12:30:57 ] [1] 授業単元:プログラミング [2] 問題文:な簡単な単語検索を行うプログラムを作成 せよ. 1. 3 つの単語を入力し,これを検索対象のデータと する. 2. 検索したい単語を入力すると,それが覚えた単語 の中に含まれていれば“YES!”,含まれていなけ れば“NO!”と出力する. 3. −1 が入力されるまで,繰り返し検索できるように する. 条件 3 つの単語は,2 次元配列str1[3][100] に格納する. (str1 には99 文字までの単語を3 つ格納できる) 実行例 $ ./q2-4 Input 3 words: <-- "aaa" <-- "bbbb" <-- "ccccc" Search word: <-- "aaa" YES! Search word: <-- "dd" NO! Search word: <-- "-1" $ (終了) [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:10月30日 木曜日 [5] その他の制限: 標準関数strcmp(str *, str *) を使うということです よろしくお願いします
829 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 12:50:45 ] >>828 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7874.txt
830 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 13:20:59 ] >>820 どう見てもキチガイはID:FJ+86jwrだな
831 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 13:54:18 ] >>790 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7875.c 2番も1番と同じ要領でやってみた。
832 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 14:15:40 ] >>802 問題文修正しました。 >>663 問題修正 [1] 授業単元: 信号処理 [2] 問題文(含コード&リンク): @ 209921行5列の2次元配列のファイルを読み込みなさい。ファイルの値を1024個で区切り1024個中の値の平均値と(平均値+5*ρ)以上の値を最大値(極大値)を求めなさい。ρを標準偏差とする。 最大値をmax1、max2、max3、・・・・として最大値は1個とは限らないこととする。 また1024個の最大値を求め終わったら、次の1024個の最大値を求めなさい。この作業をファイルの最後の値までやりなさい。 ただし、ファイルのサイズは17.2MBととし十分なメモリ領域を確保すること。 ヒント:malloc関数 ※ファイル↓(17MBもあるのでDLするのに時間がかかるかもしれません。お手数かけます。) kissho6.xii.jp/14/src/1yon14506.zip.html DLKey:data A 求めた最大値をpeak.txtに出力しなさい。1行目を最初の1024個中で求めた最大値を表示させ、2行目からは次の1024個中から求めた最大値を表示させなさい。 B @で読み込んだファイルの数値は周波数1,2,3,…,1024の時の値である。1024個で区切ったのはそのためである。 @で求めた各々の最大値の周波数を [周波数]最大値 となるようにAで出力したpeak.txtに出力できるように変更させなさい。 例:peak.txt→ [67]3.214283 [84]2.4930390 [148]5.3485704 ・・・・ [38]3.4255342 [72]3.214283 [98]2.434924390・・・・ ・ ・ ・ [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年10月28日午後1時 [5] その他の制限: 特になし よろしくお願いします。
833 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:17:14 ] >>744 ありがとうございました!
834 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:17:14 ] >>832 @とAまでは↓もうプログラムはあります。 kissho1.xii.jp/7/src/7jyou16183.zip.html DLkey : foo あとはB番目の問題をやるだけです。 プログラムよろしくお願いします。
835 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:54:45 ] >>832 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7877.c peak.txtが例の通りにならないんだが、これでいいのだろうか。 >>834 を読んでなかった…。
836 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:08:27 ] 3と4はもう答え書いたのに(´・ω・`)
837 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:09:06 ] [1] 授業単元:プログラミング [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7863.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:10/27 [5] その他の制限:
838 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:12:59 ] >>835 ありがとうございます。 しかし、peak.txtが出力されませんでした。どうしてなんだろう? コンパイルはgccですよね?
839 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:17:46 ] >>836 コンパイルはとおったのですが、peak.txtが出力できませんでした。 かなり格闘したのですが、手に負えなくて・・・OTL
840 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:20:25 ] >>835 fprintf(fpout, "[%d]%lf ", j + 1, a[j]); は正しくは fprintf(fpout, "[%d]%f ", j + 1, a[j]); ね
841 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:22:01 ] >>840 そうだった^^;
842 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:28:46 ] >>836 というか、旧Bが現@なんだよねたぶん。
843 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:41:51 ] >>842 はい、そうです。なんか旧@と旧Bの問題が重複(分かりにくい)ということだったので 旧Bの問題文を現@の問題文に含みました。 よろしくお願いします。
844 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:52:32 ] >>838 peak.txtのファイルすらできないってこと??
845 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:05:02 ] >>844 はい、そうです。ファイルができませんOTL gccのオプションは -o だけでいいのですか?
846 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:09:16 ] まさかコンパイルしただけでファイルが出来るとか思ってないよな
847 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:10:11 ] >>845 gcc hoge.c -o hoge.exe ってな感じにコンパイルして実行すれば良いと思うけど。。。 コンパイルは通るんだよね?
848 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:20:14 ] >>846 あ・・・できると思ってました>< どうすればファイルを作成することが出来るのでしょうか? >>847 コンパイルは通ります。フォルダの中にpeak.txtが出来てないだけです。
849 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:23:00 ] >>848 実行しろよ Linuxなら ./a.out で
850 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:23:06 ] >>848 コンパイルしてできた実行ファイルを実行する。 同じフォルダにdata.txtを置いておくこと。
851 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:24:26 ] ひどいな・・・ 赤ちゃんかよ・・
852 名前:デフォルトの名無しさん [2008/10/27(月) 17:40:17 ] [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): f(x)=1/(2+sinx+cosx) の積分を[π,-π]の範囲でSimpsonの1/3公式で求め、分割数と誤差を表示させよ。 [3] 環境 [3.1] OS:Windows [3.2] 言語:C言語 [4] 期限: 2008.10.29 お願いします。
853 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:40:26 ] 目が点になるっていうのはこういう事か
854 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:48:32 ] >>852 誤差って、真値は?
855 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 18:02:09 ] >>549 −>>551 すみませんでした。ちと、ボケてましたwww うまく出力できました。 ありがとうございました。
856 名前:デフォルトの名無しさん [2008/10/27(月) 18:06:50 ] >>854 あっ、すいません √2×πです。
857 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 18:12:03 ] [1] 授業単元:C [2] 問題文(含コード&リンク):課題1:2次元平面上の点を表す構造体 Point 型を定義して,その点に関する計算を行うプログラムを作成したい. 構造体 Point型は,double型の X座標と Y座標のメンバをもつ. 構造体 Point型を使用して,原点からの距離を求める関数 length_vectorを作成する. 構造体 Point型を使用して,平面の点を表示する関数 print_vを作成する. 2:2次元平面上の点を表す構造体 Point 型と構造体配列を定義して,座標平面上の2点に関する計算を行うプログラムを作成したい. 構造体 Point型は,double型の X座標と Y座標のメンバをもつ. 構造体 Point型を使用して,要素2つの構造体配列 arrayを定義する. 構造体配列 arrayに,平面の点を代入する関数 input_pointを作成する. 構造体配列 arrayに格納されている2点の長さを求める関数 length_vector2を作成する. 二乗の計算には pow ,ルートの計算には sqrtを使用 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7879.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: 任意 [3.3] 言語: C [4] 期限: ([2008年10月28日17:00まで] ??????の部分を問題文に従ってうめていただけると助かります
858 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 18:19:44 ] >>856 #include <stdio.h> #include <math.h> double f(double x) { return 1. / (2. + sin(x) + cos(x)); } int main(void) { int k, n; double h, a = -M_PI, b = M_PI, fo, fe, sum; while (1) { printf("分割数 N (0 = END) = "); scanf("%d", &n); if (n == 0) break; h = (b - a) / (2. * n); fo = fe = 0.; for (k = 1; k <= 2 * n - 3; k += 2) { fo += f(a + h * k); fe += f(a + h * (k + 1)); } sum = (f(a) + f(b) + 4. * (fo + f(b - h)) + 2 * fe) * h / 3.; printf("分割数 = %d, 誤差 = %.10g\n", n, sum - sqrt(2.) * M_PI); } return 0; }
859 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 18:20:47 ] うーん積み残し誤差も考慮しないといけんかな・・・・
860 名前:775 mailto:sage [2008/10/27(月) 19:16:14 ] お願いします。 [1] 授業単元:Cプロギラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイルを参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_auxに含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:inux [3.2] コンパイラ名とバージョン:gc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
861 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 21:35:39 ] >>549 二つ目のですが整数を入力すると入力した逆の単項式が出てしまうので入力した順に出力されるようにして欲しいのですがそれだと変化しないのですが・・・
862 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 21:49:46 ] >>861 双方向リストにするか、再帰を使うか。
863 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:00:12 ] >>821 >>822 お二人とも丁寧に有り難う御座います。ホントに助かりました。
864 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:09:35 ] [1] プログラミング入門言語 [2] 五人分の点数(0〜100点まで)を入力し、点数の高い順に並べ替えさせるプログラム [3] 環境 [3.1] OS: Windows [3.2] gcc [3.3] C [4] 期限:制限なし 初心者なので困ってます><お願いします!!
865 名前:デフォルトの名無しさん [2008/10/27(月) 22:19:29 ] #include<stdio.h> int main(void){ int score[5], temp, i, j; for(i=0;i<5;i++){ //点数入力 printf("%d人目の点数: ", i+1); scanf("%d", &score[i]); } for(i=0;i<5;i++){ //並べ替え for(j=4;j>i;j--) if(score[i] < score[j]){ temp = score[j]; score[j] = score[i]; score[i] = temp; } } for(i=0;i<5;i++) printf("%d ", score[i]); putchar('\n'); return 0; }
866 名前:865 [2008/10/27(月) 22:22:22 ] 馬鹿みたいにタブ使ったから空白作れてないな。しくじった。 #include<stdio.h> int main(void){ int score[5], temp, i, j; for(i=0;i<5;i++){ //点数入力 printf("%d人目の点数: ", i+1); scanf("%d", &score[i]); } for(i=0;i<5;i++){ //並べ替え for(j=4;j>i;j--) if(score[i] < score[j]){ temp = score[j]; score[j] = score[i]; score[i] = temp; } } for(i=0;i<5;i++) printf("%d ", score[i]); putchar('\n'); return 0; }
867 名前:デフォルトの名無しさん [2008/10/27(月) 22:47:26 ] >>831 有難う御座います
868 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:53:22 ] >>866 早速の回答ありがとうございます!! もう一問わからないのが>< どなたかお願いします>< [1] プログラミング入門言語 [2] 3人分の3教科の素点を表示する。素点は100点満点でランダムに作る。 またその時、 ・3教科の合計・平均点を計算し、それぞれ素点の右の列に表示する。 ・合計点の高い学生から順に表示する。 ・平均点は小数第一までの表示とする。 [3] 環境 [3.1] OS: Windows [3.2] gcc [3.3] C [4] 期限:なし。
869 名前:デフォルトの名無しさん [2008/10/27(月) 23:36:38 ] OSはlinux 期限はとくになし 素数を数えて落ち着くプログラム おながいします。
870 名前:デフォルトの名無しさん [2008/10/28(火) 00:49:26 ] >>858 ありがとうございます。 すいませんが、積分範囲は自分で入力するようにしたいんですよ・・・言葉足らずで申し訳ありません。 一応自分で考えたんですけどうまく出力されません・・・間違っている場所の指摘お願いします。
871 名前:デフォルトの名無しさん [2008/10/28(火) 00:50:16 ] >>858 #include <stdio.h> #include <stdlib.h> #include <math.h> void main(void) { FILE *fo; double a, b; int n, i; double h, s, x; double fa, fb, fx; double sinx, cosx, sina, cosa, sinb, cosb; if((fo = fopen("ans7.txt", "w")) == NULL){ printf("Do not open file\n"); exit(1); }
872 名前:デフォルトの名無しさん [2008/10/28(火) 00:50:53 ] つづき・・・ printf("積分区間a,bを入力してください.\n"); scanf("%lf%lf",&a, &b); printf("分割数nを入力してください.\n"); scanf("%d",&n); fx = 1/(2+sinx+cosx); fa = 1/(2+sina+cosa); fb = 1/(2+sinb+cosb); h = (b-a)/n; s = fa+fb; x=a; i=1; x=x+h; if(i%2 == 0){ s = s+2*fx;} else{ s = s+4*fx;} i = i+1; while(i>n){ s = h/3*s;} printf("分割数nは%d回です。\n", n); printf("誤差は%lfです。\n", s); fprintf(fo, "分割数nは%d回です。\n", n); fprintf(fo, "誤差は%lfです。\n",s); fclose(fo); } お願いします。
873 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 01:14:31 ] >>870 修正点が多すぎるので>>858 を修正しました。 あとは適当にいじって下さい。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7880.txt
874 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 01:26:51 ] >>868 構造体使わないようにと思って。。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7882.c
875 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 02:27:04 ] フィボナッチ数列を・・・43024項まで求めるプログラムが出来た。 この調子で、8月に発見されたメルセンヌ素数をはじき出す プログラムを作るぜ。戯言すまそ。
876 名前:しろうと [2008/10/28(火) 10:04:34 ] 初心者です。シグナルハンドリングについて勉強しているとこです。 kill -9 [pid] ってkillがpidを殺すコマンドで-9は深く考えた事無かったけどこれって 実はkill自体はシグナルを単に送るだけで、-9にkillみたいな意味があるって 認識を改めた。ここまで正しいですか?
877 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 10:12:36 ] [1] 授業単元:C言語入門 [2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7883.txt [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 10月29日まで よろしくお願いします。
878 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 10:15:54 ] どなたか857の解答期限迫ってきてるんでお願いします 問題が見づらいようなら言ってください
879 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 11:04:05 ] >>857 課題1 #include <stdio.h> #include <stdlib.h> #include <math.h> /* (x,y)-平面の点を座標で表す構造体 */ struct Point{ double x, y; }; /* 原点からの長さを求める関数 */ double length_vector(struct Point *p){ return sqrt(pow(p->x, 2) + pow(p->y, 2)); } /* 平面の点を表示する関数 */ void print_v(struct Point *p){ printf("(%f, %f)\n", p->x, p->y); }
880 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 11:04:38 ] >>857 続き int main(void) { struct Point p; printf("Input Point X: "); scanf("%lf", &p.x); printf("Input Point Y: "); scanf("%lf", &p.y); print_v(&p); /* print_vを使用して,座標の表示 */ printf("The length of vector: %f\n", length_vector(&p) ); return 0; }
881 名前:デフォルトの名無しさん [2008/10/28(火) 11:16:47 ] [1] 授業単元:データの可視化 [2] 問題文: 1: 三角関数 sin x、cos xは、テイラー展開により、 xの多項式に展開できる。2m+1次までの展開を計算する関数、 を作れ、関数の宣言は、 float MySin(float x, int m)とせよ。 2:上記MySinを使って、次数を増やすにつれて、三角関数に近づくこと示せ。 xの範囲を-πからπまでとし、π/100毎にm=0, 1, 2, 3に対して計算せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年11月3日16:00まで お願いします
882 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 11:17:04 ] >>857 課題2 #include <stdio.h> #include <stdlib.h> #include <math.h> /* (x,y)-平面の点を座標で表す構造体 */ struct Point{ double x, y; }; /* 要素を代入する関数 */ void input_point(struct Point data[], int i) { printf("Input Point p[%d].x: ", i); scanf("%lf", &data[i].x); printf("Input Point p[%d].y: ", i); scanf("%lf", &data[i].y); } /* 長さを求める関数 */ double length_vector2(struct Point data[]){ return sqrt(pow(data[0].x - data[1].x, 2.0) + pow(data[0].y - data[1].y, 2.0)); }
883 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 11:17:47 ] >>857 続き int main(void) { struct Point p[2]; /* 構造体配列の定義 */ int i; for (i = 0; i < 2; i++) { input_point(p, i); /* 座標点の入力 */ } printf("The length of vector: %lf \n", length_vector2(p) ); return 0; }
884 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 12:00:28 ] >>881 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7884.c こゆこと?
885 名前:デフォルトの名無しさん [2008/10/28(火) 13:12:20 ] >>873 ありがとうございました♪ もっと勉強します。。。
886 名前:しろうと [2008/10/28(火) 13:20:49 ] signal(SIGINT, func1); でコンパイルするとpassing argument 2 of 'signal' from incompatible pointer type という警告が出ます。どう書けばいいですか?(gcc)
887 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 14:02:49 ] >>886 void func1(int sig) { //処理 }
888 名前:しろうと [2008/10/28(火) 14:13:08 ] >>887 有り難うございました。void func1(void)で定義してました。sigという整数 型の引数が渡って来てるんですね。
889 名前:しろうと [2008/10/28(火) 14:14:58 ] 訂正 sigという整数型の引数が渡って来てるんですね。 →整数型の引数が渡って来てるんですね。
890 名前:デフォルトの名無しさん [2008/10/28(火) 15:07:15 ] C言語をやっている人はアルゴリズムも学習しているイメージがあるので ここで聞かせて頂きます。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7885.txt 上記は疑似コードで書かれていますが、アルゴリズム1もアルゴリズム2も 配列の中から最小値を探し出す処理をしているそうですが、アルゴリズム1の 02行目では配列をどうやってtempにぶちこめるのでしょうか?
891 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 15:58:48 ] アルゴリズムスレか擬似コードスレへ行ってください
892 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 16:00:44 ] >>889 signal( )に渡した第1引数がそのまま渡される。
893 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 16:01:55 ] >>890 関数を再帰呼び出ししている 1 #include <stdio.h> 2 3 int algo1(int ary[], int x) 4 { 5 if ( x == 0 ) return ary[0]; 6 else { 7 int temp = algo1(ary, x-1); 8 if ( temp <= ary[x] ) return temp; 9 else return ary[x]; 10 } 11 } 12 13 14 int main(void) 15 { 16 int a[] = {4, 3, 2, 1, 5, 7, 8, 9, 6, }; 17 18 printf("min == %d\n", algo1(a, sizeof(a)/sizeof(a[0])-1)); ここの要素数引く1するのが糞だけど 19 20 return 0; 21 } アルゴリズム2は、たぶん2分検索とかじゃないか
894 名前:892 mailto:sage [2008/10/28(火) 16:03:11 ] いや言い方が変だな まあシグナルが引数に渡されるということで
895 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 16:31:56 ] [1] 授業単元:C [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7823.txt これを実行して整数を入力すると入力した逆の単項式が出力されるので入力した順番に出力させよ ちなみに係数も乗も0にするとプログラムは終了されます [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: お任せ [3.3] 言語: C
896 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:05:12 ] 問題: ・普通の日付をユリウス日に変換して ユリウスに○日後を足し算して ・ユリウス日から日付を求める 言語:C/C++ 期限:今日中 制限:無し おねがいしまう
897 名前:775 mailto:sage [2008/10/28(火) 17:08:19 ] お願いします。本当にさっぱりわからないので… 誤字修正しました [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイルを参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_auxに含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
898 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:37:04 ] [1] 授業単元: C言語 [2] 問題文: 1変数関数 f(x)=0.5*(x-2)*(x-2) の値が最小となる点を求めるプログラムを作成せよ。 [3] 環境 [3.1] OS: mac [3.2] コンパイラ:gcc [3.3] 言語: C [4] 期限: 10月30日まで [5] その他の制限:基本的な関数のみでお願いします
899 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:49:21 ] どれもレベル高いなぁ('`A) もう一回勉強しなおそう
900 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:16:48 ] >>896 自己解決しました
901 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 21:05:38 ] >>893 くそみそ?
902 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:46:59 ] >>898 それx=2のときのf(2)=0が最小値なんだけど
903 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:48:50 ] >>898 すごい馬鹿みたいな総当りでいいか?
904 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:51:09 ] >>898 f(x)を微分したf'(x)の変曲点を求めるとかな
905 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:52:23 ] いやf'(x)=0をニュートン法か二分法で解いた方がいいな
906 名前:デフォルトの名無しさん [2008/10/29(水) 00:39:08 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): ある文字列を入力、その後また文字列を入力し、最初に入力した文字列に後で入力した文字列が含まれていれば1、含まれていなければ0と表示するプログラムを作成。 [3] 環境 [3.1] OS: Linux [3.2] gcc [3.3] C [4] 期限: 2008/10/29 12:00まで [5] その他の制限: 自作の関数を使うかstrcmp関数を使う。ポインタ変数を使う。#include<stdio.h>・#include<string.h>のみ使用。
907 名前:デフォルトの名無しさん [2008/10/29(水) 00:42:26 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 大文字の文字列を小文字に変換するプログラム。文字列を入力する際に1文字でも大文字以外の文字が入っていれば、エラーを表示しもう1度入力を促すようにする(continue文で) [3.1] OS: Linux [3.2] gcc [3.3] C [4] 期限: 2008/10/29 12:00まで [5] その他の制限: 自作の関数を使う。ポインタ変数を使う。#include<stdio.h>のみ使用。 905・906ともどもよろしくおねがいします。
908 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 00:53:58 ] [1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク):正または負の八桁以内の整数を入力し、次の変換法則にしたがって 文字列に変換して、結果を出力するプログラム *変換規則 各桁の数を半角の数字に変換し、文字型配列に右詰め(最下位桁の数字を配列要素[11]) で格納し、3桁ごとに","を挿入して、最上位桁の文字の前に'+'または'-'の符号を付加する。 符号を格納した配列要素より左の要素には空白が格納されている。また、配列要素[11]には ヌル文字が格納されている。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: bcc55 [3.3] 言語: C [5]ポインタはまだ習っていないです どうやるかさっぱり分かりません・・・ 特に3桁ごとに、を挿入したり最後に+や-を付ける所で思考が止まりました 長くて読みにくいと思いますがどうかよろしくお願いします。
909 名前:775 mailto:sage [2008/10/29(水) 01:01:47 ] お願いします。本当にさっぱりわからないので… 誤字修正しました [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイルを参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_auxに含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
910 名前:デフォルトの名無しさん [2008/10/29(水) 01:29:16 ] >>898 は、多少一般化して、任意の一変数多項式関数の最小値にしたらいいだろう
911 名前:デフォルトの名無しさん [2008/10/29(水) 01:42:04 ] [1] 授業単元: プログラミング基礎 [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7886.txt [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 10月30日 23:59まで よろしくおねがいします
912 名前:デフォルトの名無しさん [2008/10/29(水) 02:10:44 ] >>911 割れるだけ割る。 素因数分解。 ユークリッドの互除法。 などがある。 ソースはユークリッドの互除法。 3つの数の最大公約数は、2つずつの最大公約数を求めて、2つの最大公約数を求めればいいだろう
913 名前:デフォルトの名無しさん [2008/10/29(水) 02:14:38 ] 3つのはこれでいいのでは? int gcd3(x, y, z){ return gcd( gcd(x,y), gcd(y,z)); }
914 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 02:50:51 ] int gcd3(x, y, z){ return gcd( gcd(x,y), z); } で十分じゃない?
915 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 13:35:50 ] >>906 ,907 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7887.txt と思ったらタイムオーバー
916 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 14:34:52 ] 「入力された任意桁数(30桁以下)の整数に対し、各位の値を、配列を用意してそれに1つづつ格納する」のはどのようにするとスマートでしょうか・・・??
917 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 14:48:03 ] >>916 スマートとか考えると後で意味不明のコーディングになる forループでいいだろ
918 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 14:56:40 ] 自分でやってみましたが、powを使うとよく分からないことに・・・(泣) 言い方を変えて、<math.h>を極力使わないようにしたいです・・・
919 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:05:09 ] for(i=0; i<30; i++){ arr[i] = n%10; n /= 10; }
920 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:17:13 ] こんなに小さいプログラムでいいんですね(^^; 3時間かけて諦めた自分は何なんだろうorz
921 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:21:05 ] 30桁だから文字列だろ #include <stdio.h> int main(void) { char num[] = "123456789012345678901234567890"; int arr[30]; int i; int c = strlen(num); for (i = 0; i < c; i++) { arr[c - i - 1] = num[i] - '0'; } for (i = 0; i < c; i++) { printf("%d ", arr[i]); } return 0; }
922 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:23:21 ] >>921 はいエラー
923 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:26:07 ] いちいちstring.h使わんでも forで0になるまで回せばいいじゃん。 >>919 だと任意桁数ってのに合わないからね
924 名前:916 mailto:sage [2008/10/29(水) 16:01:52 ] >>921 やはり>>916 の書き方が悪かったです…。 任意桁数の整数は、入力されたものを使うことになります。
925 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 18:08:16 ] >>908 www.jitec.jp/1_04hanni_sukiru/mondai_kaitou_2008h20_2/2008h20a_fe_pm_qs.pdf これの問6とほぼ一緒な感じか? a,b,cに入るのは a: /= 10 b: i % 3 c: i < j; i++, j-- 正の整数に+をつけるなら、 if(minus != 0){ str[j++] = '-'; } この付近に少しコードを付け足せばできると思う。
926 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 18:21:20 ] >>925 すまん、勘違いした。 右詰めにするのか…。
927 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 18:41:54 ] [1] 授業単元: プログラミング演習 [2] 問題文:1から50までの整数のうち,素数であるものを全て書き出すプログラムを,for文を用いて作成. 出力結果は次のように横に並ぶようにする. 1 3 5 7 11 13 17 19 23 29 ・・・・ [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月4日 16:00まで [5] その他の制限:2重ループを用いる。nの素数判断は,2〜n-1までの数で順にわり算して,全ての数で割り切れなければnは素数。 for文までしか習ってないのでそのあたりを考慮して頂けたらありがたいです。よろしくお願いします。
928 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 18:47:04 ] >>927 #include <stdio.h> int main() { int i, j; for (i = 1; i <= 50; ++i) { for (j = 2; j <= i; ++j) { if (j == i) { printf("%d ", i); } else if (i % j == 0) { break; } } } putchar('\n'); return 0; }
929 名前:928 mailto:sage [2008/10/29(水) 18:49:28 ] int main() { int i, j; for (i = 1; i <= 50; ++i) { for (j = 2; j <= i - 1; ++j) { if (i % j == 0) { break; } } if (j == i) { printf("%d ", i); } } putchar('\n'); return 0; } すいませんこっちのほうがま真っ当です
930 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 19:09:55 ] [1] 授業単元: プログラミング基礎 [2] 問題文: (以下の問題は、 算数にチャレンジ!! の中の 第559回問題 からの引用。) 1〜10の数が書かれたカードが1枚ずつ、全部で10枚あります。 今、これらのカードを並べ、隣り合った数の差を左から次々に加えていくことにします。例えば、 2,5,6,8,1,4,3,9,7,10 と並べたならば、 3+1+2+7+3+1+6+2+3=28 ということになります。 では、この計算結果が最も大きくなるようにカードを並べると、結果はいくらになるでしょうか。(問題終) 元の問題は算数の問題なので論理で答えを出すものだが、ここではプログラムを書いてその最大値を求めて欲しい。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 10月14日まで よろしくおねがいします
931 名前:デフォルトの名無しさん [2008/10/29(水) 19:15:13 ] 大きい数字が中心で1や2は端がいいな
932 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 19:53:24 ] 一般化して100個でも出来るのがいいな
933 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 20:12:11 ] プログラムって総当たりってこと? 結構時間かかりそうとおもったけど、10桁くらいなら余裕か…。
934 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 20:19:50 ] >>933 おそらく総当りだと思います
935 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:09:12 ] >>930 100個は無理。 #include<stdio.h> #include<string.h> #define M 10 unsigned int kaijyo(int k){unsigned int s=1; for(;k>0;k--)s*=k; return s;} void retuprt(unsigned int *x){for(int n=0;n<M;n++)printf("%d ",x[n]);} unsigned int sanowa(unsigned int *x){unsigned int s=0,n; for(n=0;n<M-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]>x[n+1];return s;} main(){ unsigned int i,j,k; unsigned int orgnum[M],num[M],jretu[M]; for(i=0; i<M; i++) orgnum[i]=i+1; int max=0; unsigned int maxretu[M]; for(k=0;k<kaijyo(M);k++){ memcpy(num,orgnum,4*M); int N=k; for(i=M;i>=1;i--) { int n=N % i; jretu[i-1]=num[n]; for(j=n;j<i-1;j++) num[j]=num[j+1]; N/=i;} i=sanowa(jretu); if(max<i){max=i;memcpy(maxretu,jretu,4*M);} } retuprt(maxretu); printf(" max=%d\n",max); }
936 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:14:43 ] 最大値を与える列を求める #include<stdio.h> #include<string.h> #define M 10 void retuprt(unsigned int *x){for(int n=0;n<M;n++)printf("%d ",x[n]);} unsigned int sanowa(unsigned int *x){unsigned int s=0,n; for(n=0;n<M-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]>x[n+1];return s;} main(){ unsigned int i,j,k; unsigned int orgnum[M],num[M],jretu[M]; for(i=0; i<M; i++) orgnum[i]=i+1; for(k=0;k<3628800;k++){ memcpy(num,orgnum,4*M); int N=k; for(i=M;i>=1;i--) { int n=N % i; jretu[i-1]=num[n]; for(j=n;j<i-1;j++) num[j]=num[j+1]; N/=i;} if(sanowa(jretu)==29){retuprt(jretu);printf("\n");} }}
937 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:18:07 ] プ [4] 期限: 10月14日まで
938 名前:935 mailto:sage [2008/10/29(水) 21:21:55 ] 間違えた
939 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:23:28 ] 改めて>>877 の問2)からどなたかお願いします。 問2)連結リストの先頭の次に、セルを一つ追加する関数を作成する。セルのelement メンバの値は0 でよい。 つまり、cell1 → cell2 → cell3 → NULL であるときに、この関数を1 回呼ぶと、 cell1 → (新しいセル) → cell2 → cell3 → NULL となるようにすればいい。 問3)連結リストの先頭の前に、セルを一つ追加する関数を作成せよ。セルのelement メンバの値は0 でよい。 つまり、cell1 → cell2 → cell3 → NULL であるときに、この関数を1 回呼ぶと、 (新しいセル) → cell1 → cell2 → cell3 → NULL となるようにすればいい。 自分なりに問2を進めてみたのですがvoid add_cell_secondをどう書いたらいいのでしょうか? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7888.txt
940 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:24:28 ] これって解が214176個もあるぞ。 問題として解答するなら30にならないことも示す必要あるな。
941 名前:940 mailto:sage [2008/10/29(水) 21:37:08 ] まちがえた
942 名前:940 mailto:sage [2008/10/29(水) 21:40:22 ] 11まではなんとかもとまるが #include<stdio.h> #include<string.h> #include<vector> using namespace std; unsigned int kaijyo(int k){unsigned int s=1; for(;k>0;k--)s*=k; return s;} void retuprt(vector<unsigned char> &x){for(int n=0;n<x.size();n++)printf("%d ",x[n]);} unsigned int sanowa(vector<unsigned char> &x){unsigned int s=0,n; for(n=0;n<x.size()-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]-x[n+1];return s;} main(){ unsigned int M,K; unsigned int i,j,k; vector<unsigned char> orgnum,num,jretu; for(M=2; M<20; M++) { orgnum.resize(M),num.resize(M),jretu.resize(M); for(i=0; i<M; i++) orgnum[i]=i+1; int max=0;K=kaijyo(M); for(k=0;k<K;k++){ memcpy(&num[0],&orgnum[0],M); int N=k; for(i=M;i>=1;i--) { int n=N % i; jretu[i-1]=num[n]; for(j=n;j<i-1;j++) num[j]=num[j+1]; N/=i;} i=sanowa(jretu); if(max<i)max=i; } printf("M=%d max=%d\n",M,max); }}
943 名前:930 mailto:sage [2008/10/29(水) 21:42:17 ] >>935-936 ありがとうございました
944 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:42:45 ] >>939 func(cell1)で次と前に新しいのを挿入する。 それぞれ先頭が帰ってくるが、こういうのでいいんだろうか。 struct cell *insert_next(struct cell *target) { struct cell *c1; c1=(struct cell *) calloc(1, sizeof(struct cell)); c1->next=target->next; target->next=c1; return target; } struct cell *insert_prev(struct cell *target) { struct cell *c1; c1=(struct cell *) calloc(1, sizeof(struct cell)); c1->next=target; return c1; }
945 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:46:33 ] >>775 です。 さっぱりわからないので少しだけでもお願いします。 [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイルを参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_auxに含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
946 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:47:57 ] #include<stdio.h> #include<string.h> #include<vector> using namespace std; unsigned int kaijyo(int k){unsigned int s=1; for(;k>0;k--)s*=k; return s;} void retuprt(vector<unsigned char> &x){printf("( ");for(int n=0;n<x.size();n++)printf("%d ",x[n]);printf(")");} unsigned int sanowa(vector<unsigned char> &x){unsigned int s=0,n; for(n=0;n<x.size()-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]-x[n+1];return s;} main(){ unsigned int M,K; unsigned int i,j,k; vector<unsigned char> orgnum,num,jretu,maxretu; for(M=2; M<20; M++) { orgnum.resize(M);num.resize(M);jretu.resize(M);maxretu.resize(M); for(i=0; i<M; i++) orgnum[i]=i+1; int max=0;K=kaijyo(M); for(k=0;k<K;k++){ memcpy(&num[0],&orgnum[0],M); int N=k; for(i=M;i>=1;i--) { int n=N % i; jretu[i-1]=num[n]; for(j=n;j<i-1;j++) num[j]=num[j+1]; N/=i;} i=sanowa(jretu); if(max<i){max=i;memcpy(&maxretu[0],&jretu[0],M);} } printf("\nM=%d max=%d ",M,max); retuprt(maxretu); }}
947 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:49:43 ] >>943 >>935 は間違えているので、このように変更するように x[n+1]>x[n]?x[n+1]-x[n]:x[n]-x[n+1];
948 名前:775 ◆00BY157eo6 mailto:sage [2008/10/29(水) 22:06:50 ] >>775 です。 さっぱりわからないので少しだけでもお願いします。 [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイルを参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_auxに含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: ([2008年11月6日まで] トリップつけました。
949 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:08:19 ] >>929 ありがとうございました
950 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:09:28 ] >>948 まずはテキストでうp
951 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:10:10 ] >>944 ありがとう。そのinsert_nextとprevとfunc(cell1)を>>939 のどこに入れたらいいんでしょうか?
952 名前:775 ◆00BY157eo6 mailto:sage [2008/10/29(水) 22:17:02 ] >>950 テキストでファイル内容をうpしました。 ただ、できれば直接ファイルを参照して欲しいのですが… [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイル(内容は) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7890.txt を参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_aux(内容は) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7889.txt に含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
953 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:34:57 ] >>952 もう一度行列を復習してから書き込んでくれ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7890.txt の行列って正方行列じゃないだろ
954 名前:775 ◆00BY157eo6 mailto:sage [2008/10/29(水) 22:42:52 ] >>953 あ、そうですね… すいませんでした 一度ひっこみます
955 名前:775 ◆00BY157eo6 mailto:sage [2008/10/29(水) 22:50:53 ] 修正しました。 [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイル(内容は下のtxtにまとめました) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7892.txt を参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_aux(内容は) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7889.txt に含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
956 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 00:08:44 ] >>930 面白い問題なので俺もやってみた。コマンドライン引数で要素数指定。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7894.txt N=10 Max=49( 1152件) time 0:00.62 N=11 Max=59(11520件) time 0:06.03 N=12 Max=71(28800件) time 1:13.19 N=13 おわらねぇ……てか落ちた! CPU Q6600 2.4GHz OS Win Vista Ulti 32bit
957 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 00:11:19 ] なんか atexit する場所がへんだった。
958 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 00:40:43 ] N=2n+1のときの解はたぶん、 n+2, n, 2n+1, n-1, 2n, n-2, 2n-1, n-3,…,n+3, 1, n+1 だな。 N=2nのときも似たようなもん。証明は知らない。
959 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 00:44:30 ] N=2n+3とすると n+3, n+1, N, n, N-1, n-1, N-2, n-2,…,n+4, 1, n+2 となり簡明か
960 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 01:01:09 ] N=2nのときmaxは、2*n*n-1 N=2n+1のときmaxは、2*n*n+2n-1 だな。証明は知らない。
961 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 01:36:04 ] >>930 面白い問題なのでオレも考えてみた。 で、解くためのアルゴリズムを見つけた。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7895.txt 是非とも等角フォントで。 差の表を用いて考えれば 全部の数列の差を試さなくてすむし、一発で出来る
962 名前:930 mailto:sage [2008/10/30(木) 01:44:42 ] >>961 絵はどうでもいいからCで書けよカス
963 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 01:56:47 ] >>962 偽者だというのは分かるが、お前がキモイ・・・