- 1 名前:デフォルトの名無しさん [2007/10/23(火) 23:48:35 ]
- あなたが解けない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++の宿題を片付けます 97代目 pc11.2ch.net/test/read.cgi/tech/1191937213/
- 263 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 18:17:14 ]
- 単純に3つの引数とって平均を求める関数て言えばいいのに、なんで割り勘とか余計な設定つけてんだよ。
一人一人の代金がわかってるなら、割り勘になんてしないだろ。
- 264 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 18:43:15 ]
- >>263
「相乗平均じゃなくて相加平均だよ^^ お前ら間違えんなよ^^」て言いたかったんだよ 気の回る良い先生じゃないか
- 265 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 19:40:50 ]
- 宿題マダァ?(・∀・ )っ/凵⌒☆チンチン
- 266 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 22:09:36 ]
- ひつまぶしキボンヌ
- 267 名前:デフォルトの名無しさん [2007/10/26(金) 22:12:45 ]
- 質問テンプレ】
[1] プログラミング [2] 自然対数の底eを求めるプログラムをSRT除算を用いて求めよ。 exp(x)=Σ(n=0,∞){1/n!}=1/0!+1/2!+1/3!+…+1/n! =1+(1+1/2(1+1/3(1+…+1/n))) 固定小数点で、整数部を16ビット、小数部を48ビットとする(n≧17) [3] 環境 [3.1] Vine Linux [3.2] gcc [3.3] C言語 [4] 2007年10月29日8:40まで でも早い方がいいです。 [5] ループを使用してお願いします。
- 268 名前:デフォルトの名無しさん [2007/10/26(金) 22:12:55 ]
- 全ディレクトリのファイルを調べてサイズが一致するファイルをプルパスで出力せよ
- 269 名前:デフォルトの名無しさん [2007/10/26(金) 22:19:18 ]
- journal.mycom.co.jp/column/architecture/087/index.html
- 270 名前:デフォルトの名無しさん [2007/10/26(金) 22:22:06 ]
- >>265
自分で要求するほど、宿題を回答してやりたいのか。 この掲示板の鏡だな、解けない問題は無いってか?
- 271 名前:デフォルトの名無しさん [2007/10/26(金) 22:25:20 ]
- SRT除算は簡単ではないな
- 272 名前:デフォルトの名無しさん [2007/10/26(金) 22:43:03 ]
-
[1] プログラミング [2] doiob.net/doiob/uploader/src/up11903.jpg シンプソンの公式を用いて定積分を求めるプログラムを作成し、 以下2つの定積分を計算せよ。ただし刻み幅 h=0.1 とする。 [3] 環境 [3.1] Linux [3.2] gcc [3.3] C言語 [4] 2007年10月29日 お願いします
- 273 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 22:46:03 ]
- >>269
これはむずい もう少し前のページから見ないと単語がわからなすぎる
- 274 名前:デフォルトの名無しさん [2007/10/26(金) 22:54:36 ]
- シンプソンは簡単 関数をf(x)とし、 区間(a,b)を一分割で積分するとする
m=(a+b)/2 、d=(b-a)とするとき積分値は d/6 * (f(a)+f(b)+4f(m))だ N分割のときはこの値を使えばいい
- 275 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 22:57:47 ]
- >>274
なぜコードで示さないんだ
- 276 名前:デフォルトの名無しさん [2007/10/26(金) 22:59:44 ]
- 具体的には、区間(a,b)をN分割するならば、
F(s,t)= (t-s)/6 * (f(s)+f(t)+4f(s+t /2)) 、 d = (b-a)/Nとおくとき n=0,・・・,N-1に対しF(a+nd, a+(n+1)d)の和を計算すればよい
- 277 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 23:02:42 ]
- >>276
擬似コードだけなら単位はやれないな
- 278 名前:デフォルトの名無しさん [2007/10/26(金) 23:03:56 ]
- >>275
プログラム自体は計算と結果の出力だけの簡単なものだからチャレンジしてみなってことじゃない? 計算内容自体は>>274が解説してくれてるし。 もしくは作成中か。
- 279 名前:デフォルトの名無しさん [2007/10/26(金) 23:08:01 ]
- >>259
ありがとうございます。ポインタ変数が問題だったんですね。 仮引数だったのをポインタのポインタで呼び出しが出来るようにしたと。 なるほど納得しました。
- 280 名前:デフォルトの名無しさん [2007/10/26(金) 23:09:01 ]
- #include <stdio.h>
#include <math.h> double f(double x){return exp(-x*x);} double g(double x){return exp(1/sqrt(1+x*x*x*x));} #define F(a,b) (f(a)+f(b)+4*f((a+b)/2))*(b-a)/6 #define G(a,b) (g(a)+g(b)+4*g((a+b)/2))*(b-a)/6 int main(){ double x,d=0.1,sum; sum=0; for(x=0;x<1;x+=d)sum+=F(x,x+d); printf("%f\n",sum); sum=0; for(x=0;x<1;x+=d)sum+=G(x,x+d); printf("%f\n",sum); }
- 281 名前:デフォルトの名無しさん [2007/10/26(金) 23:10:31 ]
- 訂正
double g(double x){return 1/sqrt(1+x*x*x*x);}
- 282 名前:デフォルトの名無しさん [2007/10/26(金) 23:12:03 ]
- 値があっているか確認したいが数値計算ソフトだれか持っている?
- 283 名前:デフォルトの名無しさん [2007/10/26(金) 23:12:09 ]
- 何にせよ動作するリストを出すのがこのスレってもん
- 284 名前:デフォルトの名無しさん [2007/10/26(金) 23:12:15 ]
- >>274 >>276
で組み込む計算式作ってくれてるから、もう課題出来てるも同然な気がする。 だって、その式を表示するだけで完成でしょ。
- 285 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 23:17:30 ]
- >>272 カウンタは整数のが良いと思うので便乗
#include <stdio.h> #include <math.h> double func1(double x) { return sqrt(pow(x, 4) + 1); } double func2(double x) { return exp(-pow(x, 2)); } int main(void) { double l = 0.0, r = 1.0, h = 0.1, s = 0; int i; for(i = 0; i < (r - l)/h; i += 2) s += h/3*(func1(l + i*h) + 4*func1(l + (i + 1)*h) + func1(l + (i + 2)*h)); printf("%g\n", s); for(i = 0; i < (r - l)/h; i += 2) s += h/3*(func2(l + i*h) + 4*func2(l + (i + 1)*h) + func2(l + (i + 2)*h)); printf("%g\n", s); return 0; }
- 286 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:03:16 ]
- [1] 授業単元: コンピューター
[2] 問題文(含コード&リンク):整数演算と浮動小数点演算で自分のプロセッサのスピードをテストするプログラムと結果を示しなさい。 テストするのは整数、浮動小数点ともに、加減乗除の4つづ、計8つです。 [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: [5] その他の制限: 結果はcygwinのtimeを使えってばっちゃが言ってました。 お願いします。
- 287 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:07:31 ]
- ふざけてんの
- 288 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:13:39 ]
- >>280
副作用乙
- 289 名前:デフォルトの名無しさん [2007/10/27(土) 00:18:05 ]
- なんで6で割っているんだぜ?
- 290 名前:デフォルトの名無しさん [2007/10/27(土) 00:34:16 ]
- >>289
#include <stdio.h> #include <math.h> double f(double x){return exp(-x*x);} double g(double x){return exp(1/sqrt(1+x*x*x*x));} #define F(a,b) (f(a)+f(b)+4*f((a+b)/2))*(b-a)/6 #define G(a,b) (g(a)+g(b)+4*g((a+b)/2))*(b-a)/6 int main(){ double x,d=0.001,sum; sum=0;for(x=0;x<1;x+=d)sum+=F(x,x+d); printf("%f\n",sum); sum=0;for(x=0;x<1;x+=d)sum+=G(x,x+d); printf("%f\n\n",sum); //単純な定積分 int n,N=1/d; sum=0;for(n=0;n<N;n++)sum+=d*g(n*d); printf("%f\n",sum);}
- 291 名前:デフォルトの名無しさん [2007/10/27(土) 00:47:03 ]
- Integral(f,a,b,d)って出来るの? 関数わたし
- 292 名前:デフォルトの名無しさん [2007/10/27(土) 00:55:29 ]
- スマソ全然見てなかったわ
- 293 名前:272 [2007/10/27(土) 01:03:57 ]
- ありがとうございました
解説で分かってきたので色々と試してみます
- 294 名前:291 [2007/10/27(土) 01:09:38 ]
- できた
#include <stdio.h> #include <math.h> double f(double x){return exp(-x*x);} double g(double x){return 1/sqrt(1+x*x*x*x);} #define F(a,b) (f(a)+f(b)+4*f((a+b)/2))*(b-a)/6 typedef double (*func)(double); double Integral(func f,int a,int b, double d){ int n,N=(int)1/d;double s=0; for(n=0;n<N;n++)s+=F(n*d,n*d+d); return s;} int main(){ double d=0.001; printf("%f\n",Integral(f,0,1,d)); printf("%f\n",Integral(g,0,1,d));}
- 295 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:19:55 ]
- 先こされた。
#include<stdio.h> #include<math.h> double quadInterpol( double (*fun)( double ), double begin, double end ) { return ((*fun)(begin) + 4*(*fun)( (begin+end)/2 ) + (*fun)(end)) * (end-begin)/3; } double integral( double (*fun)( double ), double begin, double end, double h ) { double result = 0.0; double pos = begin; while( pos <= end ) { result += quadInterpol( (*fun), pos, pos+h ); pos += h; } return result; } double f(double x) { return exp(-x*x); } int main(void) { const double diff = 0.1; printf("result=%f\n",integral(f,0.0,1.0,diff)); return 0; }
- 296 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:26:36 ]
- >>294
出題者じゃないんだが。 typedef double (*func)(double); これってなにやってるの?
- 297 名前:57 mailto:sage [2007/10/27(土) 01:29:04 ]
- >>228
自分も詳しい理由は分かりませんが、この再帰の問題以前にも、リストで 色々な動作をする関数を作ったので、その関数を作る時、関数に引数を 渡したりするのに、リストの先頭にデータを入れない方が都合が 良いんじゃないですかね? リストは先頭にデータを入れないとばかり思ってたので、よく分かりませんが。
- 298 名前:291 [2007/10/27(土) 01:30:26 ]
- >>296
たとえばDLLを使うとき次のように書く 型の定義 typedef int (__stdcall *FNC)(const HWND , LPCSTR , LPSTR , const DWORD); main(){ HINSTANCE hd = LoadLibrary("UNZIP32.DLL"); FNC p = (FNC)GetProcAddress(hd,"UnZip"); }
- 299 名前:デフォルトの名無しさん [2007/10/27(土) 01:30:41 ]
- >>290
すいませんd=0.001となってるのが良く分からないんですが
- 300 名前:291 [2007/10/27(土) 01:31:39 ]
- >>299 細かくした方が値が正確になるって事だけだ d=0.1でいい
- 301 名前:コッチェビン [2007/10/27(土) 01:32:28 ]
- なんかすごいシコシコしたい・・・
- 302 名前:デフォルトの名無しさん [2007/10/27(土) 01:33:37 ]
- >>300
どうもです
- 303 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:34:19 ]
- >>298
つまりfuncという関数型ができたということ? そうしたらIntegral(func funcName,...) とすべきでは? それと #define F(a,b) (f(a)+f(b)+4*f((a+b)/2))*(b-a)/6 ここでfつかっちゃったらマクロFでは常に関数fが呼び出されることにならない?
- 304 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:35:47 ]
- ちなみに追い詰めてるわけじゃないです。数値あわせがしたいだけです。
計算結果に自信がないので。
- 305 名前:291 [2007/10/27(土) 01:36:19 ]
- >>303
呼び出すのはfでいいんだよ 引数でfとかgを指定するから
- 306 名前:291 [2007/10/27(土) 01:37:56 ]
- >>304
単純な定積分の値と比較したから正解だろう >>290で求めている あと>>290はgが間違えていて 正しくは double g(double x){return 1/sqrt(1+x*x*x*x);}
- 307 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:38:07 ]
- >そうしたらIntegral(func funcName,...)
スマソ。そうなってた。
- 308 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:40:16 ]
- >>305
double Integral(func f,int a,int b, double d){ int n,N=(int)1/d;double s=0; for(n=0;n<N;n++)s+=F(n*d,n*d+d); return s;} 引数でfという関数を取っているのは確かなんだけど 関数内で一回も使ってない。
- 309 名前:291 [2007/10/27(土) 01:41:38 ]
- >>308
Fがマクロだから使っている あと使っていないのはaとbだ 勝手に(0,1)だとおもって書いてしまった
- 310 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:41:57 ]
- >>308
マクロ展開してみればいい でも名前が被っているのは気持ち悪いな #include<stdio.h> void a(void){printf("func a\n");} void b(void){printf("func b\n");} void c(void (*a)(void)){a();} int main(void){ c(a); c(b); return 0; }
- 311 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:43:31 ]
- >>309
なるほどね。理解できました。 exp(-x*x)の関数名をfにしないでくれたらよかった。
- 312 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:53:03 ]
- >>294
粘着すまん。 6じゃなくて3で割らないといけなくないか? h=0.1で指定されているし。
- 313 名前:修正版 [2007/10/27(土) 02:00:49 ]
- #include <stdio.h>
#include <math.h> double exp_x2(double x){return exp(-x*x);} double ichiwaru_root_1tasu_x4(double x){return 1/sqrt(1+x*x*x*x);} #define F(a,b) (f((a))+f((b))+4*f(((a)+(b))/2))*((b)-(a))/6 typedef double (*func)(double); double Integral(func f,double a,double b, double d){ int n,N;double s=0; N=(int)(b-a)/d; for(n=0;n<N;n++) s+=F(a+n*d,a+(n+1)*d); s+=F(N*d,b);return s;} int main(){ double d=0.1; printf("%f\n",Integral(exp_x2,0,1,d)); printf("%f\n",Integral(ichiwaru_root_1tasu_x4,0,1,d));}
- 314 名前:修正版 [2007/10/27(土) 02:03:09 ]
- >>312
そもそも2hの幅で積分しろってことか それならそうだな
- 315 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:04:51 ]
- うがあぁ数値が合わない。
何が違うんだ。。。。。
- 316 名前:修正版 [2007/10/27(土) 02:07:29 ]
- >>312
でも最小の区間を与えた方が標準的だと思う Integral(f, 0, 1, 0.2))と呼び出せば正解と一致する値が出るはずだ
- 317 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:11:03 ]
- >>316
考えてみる。 正解はちなみにいくつなんだ 俺は result=1.560123 result=1.988458 そっちは 1.493648 1.854075 他の検証方法ってある?Excelあたりでできるもんかね?
- 318 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:12:30 ]
- あ。6->3にした値ね。
- 319 名前:修正版 [2007/10/27(土) 02:17:43 ]
- 正解は0.746825と0.927040じゃないか
単純な積分値とほぼ一致する #include <stdio.h> #include <math.h> double f(double x){return exp(-x*x);} double g(double x){return 1/sqrt(1+x*x*x*x);} int main(){ double x,s,d=0.001; s=0;for(x=0;x<1;x+=d)s+=d*f(x); printf("%f\n",s); s=0;for(x=0;x<1;x+=d)s+=d*g(x); printf("%f\n",s); }
- 320 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:25:04 ]
- Excelで確認したところ俺もexp(-x*x)の単純な積分の値は
0.747508011 ぐらいになった。 では6で割るべきなのか。
- 321 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:28:04 ]
- 6->3にした結果
俺 result=0.780061 result=0.994229 そちら 0.746825 0.927040 そっちの勝ちだ.orz ノシ
- 322 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:28:58 ]
- 間違えた
3->6
- 323 名前:修正版 [2007/10/27(土) 02:31:52 ]
- doiob.net/doiob/uploader/src/up11903.jpg
この式よく見てみろ hを算出するときに既に2で割っている 分割数nに対して2nで割っているからややこしいだけ
- 324 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:34:34 ]
- そういうことか・・・ややこしい。
- 325 名前:デフォルトの名無しさん [2007/10/27(土) 02:40:23 ]
- 便乗質問なんだけど
h=0.1で与えられてるから式の通りに3で割るんじゃないの? の辺りがイマイチ理解できんので教えてくれ…
- 326 名前:修正版 [2007/10/27(土) 02:46:21 ]
- >>325
問題どおりにやるとひとつひとつの積分区間は2hなので 6で割る部分と打ち消しあって3になる 幅hの積分を求めるのではなく x とx+hとx+2hの三点を2次関数で近似したいと言うことなんだろう だから2h幅になっている
- 327 名前:修正版 [2007/10/27(土) 02:48:01 ]
- >>325
原理、近似の方法はここに書いてある ja.wikipedia.org/wiki/%E3%82%B7%E3%83%B3%E3%83%97%E3%82%BD%E3%83%B3%E3%81%AE%E5%85%AC%E5%BC%8F
- 328 名前:デフォルトの名無しさん [2007/10/27(土) 02:54:49 ]
- ありがとうございます
- 329 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:05:21 ]
- >>287
ふざけてないです。 おおマジです。
- 330 名前:デフォルトの名無しさん [2007/10/27(土) 03:57:35 ]
- 引用しますが、計算式を
#define F(a,b,h) (f(a)+f(b)+4*f((a+b)/2))*h/3 #define G(a,b,h) (g(a)+g(b)+4*g((a+b)/2))*h/3 というようにhを用いた式で表すなら 図のように d=0.1 for(x=0;x<1;x+=d*2) とすればいいのか
- 331 名前:修正版 [2007/10/27(土) 04:06:02 ]
- >>330
#include <stdio.h> #include <math.h> double f(double x){return exp(-x*x);} double g(double x){return 1/sqrt(1+x*x*x*x);} #define F(x,h) (f(x) + 4*f(x+h) + f(x+2*h)) * h/3 #define G(x,h) (g(x) + 4*g(x+h) + g(x+2*h)) * h/3 int main(){ double x,sum,h=0.1; sum=0; for(x=0;x<1;x+=2*h)sum+=F(x,h); printf("%f\n",sum); sum=0; for(x=0;x<1;x+=2*h)sum+=G(x,h); printf("%f\n",sum);}
- 332 名前:デフォルトの名無しさん [2007/10/27(土) 04:12:10 ]
- 何か邪魔臭くなっていましたね さんくすこ
- 333 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 08:27:42 ]
- まだやってたのか。俺は寝てしまって今起きた
#define F(x,h) (f(x) + 4*f(x+h) + f(x+2*h)) * h/3 #define G(x,h) (g(x) + 4*g(x+h) + g(x+2*h)) * h/3 じゃなくて #define F(x,h) (f(x) + 4*f(x+h/2) + f(x+h)) * h/6 #define G(x,h) (g(x) + 4*g(x+h/2) + g(x+h)) * h/6 にするかもしくはh=0.05にしないといけない。
- 334 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 08:35:59 ]
- すまん。寝ぼけて間違えた。
>>331でOK。
- 335 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 08:37:39 ]
- やっと数値のずれが直ったので貼る
#include<stdio.h> #include<math.h> double quadInterpol( double (*fun)( double ), double begin, double h ) { return ((*fun)( begin ) + 4.0*(*fun)( begin + h ) + (*fun)( begin + 2.0*h )) * h/3.0; } double integral( double (*fun)( double ), double begin, double end, double h ) { double result = 0.0; double pos = begin; do { result += quadInterpol( (*fun), pos, h ); pos += 2.0*h; } while( pos < end ); return result; } double f(double x) { return exp(-x*x); } double g(double x) { return 1.0/sqrt(1 + x*x*x*x); } int main(void) { const double diff = 0.1; printf("result=%f\n",integral(f,0.0,1.0,diff)); printf("result=%f\n",integral(g,0.0,1.0,diff)); return 0; }
- 336 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 08:55:22 ]
- ひゃっほう。
- 337 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 10:08:16 ]
- なんでシンプソン公式だけでこんなにスレ進むんだよw
- 338 名前:デフォルトの名無しさん [2007/10/27(土) 10:59:46 ]
- [1] 授業単元: プログラミング
[2] 問題文:整数nをscanfで入力後"factorial"という関数を呼び出して、n!を 求めるプログラム(結果はmainにて表示) (定義例:int factorial(int num)) [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: ([2007年10月28日まで] [5] その他の制限:定義例を使ってください if,while,switch,forは習いました お願いします
- 339 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 11:06:51 ]
- #include <stdio.h>
int factorial(int num) { int i, ret = 1; for(i=2; i<=num; i++) ret *= i; return ret; } int main(void) { int n; printf("nを入力:"); scanf("%d", &n); printf("%dの階乗は%d\n", n, factorial(n)); return 0; }
- 340 名前:デフォルトの名無しさん [2007/10/27(土) 11:17:19 ]
- >>339
全くわかんなかったのに数分で解いてるよ(>_<) ありがとうございました。
- 341 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 11:27:20 ]
- て言うか既出ネタだろ
>>235-237で
- 342 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 11:29:23 ]
- 階乗は頻出の基本問題だし、このスレで答えてる人なら数分とかじゃなくて、問題見た瞬間に即答だろ。
- 343 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 11:49:08 ]
- テンプレレベルだよな・・・と思ったらwikiにも書いてないな
今から編集してくる
- 344 名前:デフォルトの名無しさん [2007/10/27(土) 11:51:23 ]
- >>342さすがですね
勉強不足ですいません
- 345 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 12:09:39 ]
- ×勉強不足
○勉強する気がない
- 346 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 12:13:00 ]
- LU分解とか死ねwwwwww
京大電電でつけど、プログラムの課題がイミフwwwwwwww
- 347 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 12:15:15 ]
- それ、プログラム以前の問題だろ
Fランの大学ですらやる基本的な問題だし
- 348 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 13:38:28 ]
- 【質問テンプレ】
[1] 授業単元: 画像工学 [2] 問題文(含コード&リンク):ある特定の画像を自動的に判別する フォルダ内の画像を自動的に判別し,緑の画像があればhighlightのフォルダに なければotherのフォルダに分別する [3] 環境 [3.1] OS: (Windows/Linux/等々) Windows [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) よくわかりません [3.3] 言語: (C/C++/どちらでも可 のいずれか) Visual C++ 2005 [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 来週水曜日まで [5] その他の制限: 特にありません kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5159.zip
- 349 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 13:47:53 ]
- >>347
池沼でサーセンwwwww
- 350 名前:デフォルトの名無しさん [2007/10/27(土) 14:08:07 ]
- 348
こんなの面倒 授業でていたやつのほうが関数にくわしいだろ
- 351 名前:デフォルトの名無しさん [2007/10/27(土) 15:52:58 ]
- [1] 授業単元: C言語
[2] 問題文:2×2の行列A,Bの積(cのij成分=Σaのij成分bのij成分)を表示する a[i][j]=[0 4] b[i][j]=[5 0] [-5 -1] [0 -5] [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: ([2007年10月28日まで] [5] その他の制限:for文を用いてください
- 352 名前:デフォルトの名無しさん [2007/10/27(土) 16:02:13 ]
- #include <stdio.h>
main(){ int i,j,x=0,a[2][2]={0,4,-5,-1},b[2][2]={5,0,0,-5}; for(i=0;i<2;i++)for(j=0;j<2;j++)x+=a[i][j]*b[j][i]; printf("%d\n",x); }
- 353 名前:デフォルトの名無しさん [2007/10/27(土) 16:12:53 ]
- 2次元配列のサイズを調べる方法ありますか?
- 354 名前:デフォルトの名無しさん [2007/10/27(土) 16:16:09 ]
- #include <stdio.h>
main(){ int x[70][6],m,n; m=sizeof(x)/sizeof(x[0]); n=sizeof(x[0])/sizeof(x[0][0]); printf("%d %d",m,n); }
- 355 名前:デフォルトの名無しさん [2007/10/27(土) 16:27:45 ]
- #include <stdio.h>
main(){ int i,j,k; int a[2][2]={0,4,-5,-1},b[2][2]={5,0,0,-5},c[2][2]; for(i=0;i<2;i++) for(j=0;j<2;j++) for(k=0;k<2;k++) c[i][j]=a[i][k]*b[k][j]; for(i=0;i<2;i++){ for(j=0;j<2;j++)printf("%d ",c[i][j]); printf("\n");} }
- 356 名前:デフォルトの名無しさん [2007/10/27(土) 16:34:11 ]
- [1] 授業単元: C言語
[2] 問題文:キーボードから5点の座標を二次元配列に入力し、 原点から最も離れた点の座標を出力するプログラムを作成せよ [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: ([2007年10月28日まで] [5] その他の制限:多次元配列まで習ってます
- 357 名前:147 mailto:sage [2007/10/27(土) 16:35:47 ]
- 機械に仕事を割り当てるところまでやった
すなわち、問題文の >5種類の性能の異なる加工機械が各1台ある工場で、100種類の製品を作っている。 >各製品がその日に受注した場合、LT(完成までにかかる日数)を表示するスケジューリングプログラムを作成せよ。 >また、ランダムに発注があり、発注があった場合にのみ実際に機械は使用される。 >すなわち、発注が一度もなければ100日間ずっと同じLTが表示され、発注があれば、 >その日以降は機械が使用されているので、LTが長くなる可能性があるということ。 ところまで。 // 生産計画・生産管理 // 97th-res: >>168 (>>111, >>211, >>229) // 2007/10/27 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5160.txt
- 358 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 16:46:34 ]
- >>356
#include<stdio.h> #include<math.h> int main(void) { double maximum_distance=0.0, distance; double x, y, point[5][2], (*maximum_point)[2]; int i; for(i=0;i<5;i++) { printf("Input x :"); scanf("%lf", &x); printf("Input y :"); scanf("%lf", &y); point[i][0]=x; point[i][1]=y; distance=sqrt(x*x+y*y); if(distance>maximum_distance || !i) { maximum_distance=distance; maximum_point=&point[i]; } } printf("\n( %lf , %lf )\n", (*maximum_point)[0], (*maximum_point)[1]); return 0; }
- 359 名前:入力うまくいかない [2007/10/27(土) 16:48:36 ]
- #include <stdio.h>
main(){ int x[6],y[6],i,ban; double max=0,d; for(i=1;i<6;i++){ printf("\n%d 番目のx座標を入力して下さい ",i); x[i]=getchar(); printf("\n%d 番目のy座標を入力して下さい ",i); y[i]=getchar();} for(i=1;i<6;i++){ d=x[i]*x[i]+y[i]*y[i]; if(d>max){max=d;ban=i;}} printf("原点からもっとも遠い座標は(%d,%d)です ",x[ban],y[ban]); }
- 360 名前:scanfにしたら良くなったよ [2007/10/27(土) 16:54:18 ]
- #include <stdio.h>
main(){ int x[6],y[6],i,ban; double max=0,d; for(i=1;i<6;i++){ printf("\n%d 番目のx座標を入力して下さい ",i); scanf("%d",&x[i]); printf("\n%d 番目のy座標を入力して下さい ",i); scanf("%d",&y[i]);} for(i=1;i<6;i++){ d=x[i]*x[i]+y[i]*y[i]; if(d>max){max=d;ban=i;}} printf("\n原点からもっとも遠い座標は(%d,%d)です ",x[ban],y[ban]);}
- 361 名前:356 [2007/10/27(土) 16:54:35 ]
- >>358さん
>>359さん 早い回答ありがとうございました!
- 362 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 17:00:45 ]
- // >>356 ソート付き
#include <iostream> #include <math.h> #define NUM 5 using namespace std; int main (void){ double p[NUM][2], absolute[NUM]; for (int i=0; i<NUM; i++){ cout << i+1 << "番目の点の" << endl; cout << "\tx座標を入力してください : "; cin >> p[i][0]; cout << "\ty座標を入力してください : "; cin >> p[i][1]; } for (int i=0; i<NUM; i++) absolute[i] = sqrt(p[i][0] * p[i][0] + p[i][1] * p[i][1]); double tempabs, tempx, tempy; for (int i=0; i<NUM-1; i++) { for (int j=NUM-1; j>i; j--) { if (absolute[j-1] > absolute[j]) { tempabs = absolute[j]; tempx = p[j][0]; tempy = p[j][1]; absolute[j] = absolute[j-1]; p[j][0] = p[j-1][0]; p[j][1] = p[j-1][1]; absolute[j-1] = tempabs; p[j-1][0] = tempx; p[j-1][1] = tempy; }}} cout << "(" << p[NUM-1][0] << ", " << p[NUM-1][1] << ")" << endl; return (0); }
- 363 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 17:05:37 ]
- >>356
既に何人も回答してるけど参考までに #include <stdio.h> int main(int argc, char* argv[]) { int i, p[5][2], r2[5], r2max = 0; printf("input points\n"); for(i=0;i<5;i++) { printf("point[%d] : ", i); scanf("%d %d", p[i], p[i]+1); r2[i] = p[i][0] * p[i][0] + p[i][1] * p[i][1]; if(r2max < r2[i]) { r2max = r2[i]; } } printf("maximum range points\n"); for(i=0;i<5;i++) if(r2[i] == r2max) printf("point[%d] : %d %d\n", i, p[i][0], p[i][1]); return 0; }
|

|