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/
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; }
364 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 17:29:58 ] すいません!このJAVAコードをCに直せって言われました! 直してください!!!! public static int[] invoke(int[] input){ //WARNING: This will destroy the contents of the input array //This function assumes input.length=2^n, n>1 int[] output = new int[input.length]; for(int length = input.length >> 1; ; length >>= 1){ //length=2^n, WITH DECREASING n for(int i = 0; i < length; i++) { int sum = input[i*2]+input[i*2+1]; int difference = input[i*2]-input[i*2+1]; output[i] = sum; output[length+i] = difference; } if (length == 1) return output; //Swap arrays to do next iteration System.arraycopy(output, 0, input, 0, length<<1); } }
365 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:03:32 ] >>364 >>1 読んでから書き直し
366 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:07:30 ] >>365 つまりテンプレ通りに書けってこった とりあえずこのコードが何をするかぐらいは書いたほうがいい
367 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:20:27 ] >>357 根本的に考え方が間違ってるよ。 これは生産計画立案の問題。
368 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:20:53 ] (int[] input)これをcで引数一個で実現するのは無理では? 最後尾にNULL入れた配列が欲しくなったり、 サイズを持った構造体へのポインタにしたくなったり、 int *input, int sizeみたいに素直になりたかったり。
369 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:37:29 ] 突っ込むところはinput.lengthこっちだろ
370 名前:aho mailto:sage [2007/10/27(土) 19:02:35 ] >>364 今書いてて思ったけど何がしたいのかいまいち分からない。 sumとdifferenceを計算した後何でoutputを上書きするの? どんどん足し込む仕様じゃないの? とりあえず、今ので書いてみるよーん
371 名前:aho mailto:sage [2007/10/27(土) 19:08:59 ] どうもごめんちゃーい。 最後の行のarrayCopyみてませんでした。
372 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 19:09:34 ] >>370 ものすごい助かります(;; 離散ウェーブレット変換 ttp://ja.wikipedia.org/wiki/%E9%9B%A2%E6%95%A3%E3%82%A6%E3%82%A7%E3%83%BC%E3%83%96%E3%83%AC%E3%83%83%E3%83%88%E5%A4%89%E6%8F%9B のHaarWavletというものです。
373 名前:aho mailto:sage [2007/10/27(土) 19:24:07 ] /* メモリの確保は呼び出し元で行う。 この関数内でメモリを確保して配列を返すと、メモリの解放ができない。 \param input 入力配列 \param output 出力配列 \param size 入力配列の大きさ */ void invoke(int* input, int* output, int size){ // 1/2 for(int length = size >> 1; ; length >>= 1){ for(int i=0; i<length; i++){ int sum = input[i*2] + input[i*2 + 1]; int difference = input[i*2] - input[i*2+1]; output[i] = sum; output[length+i] = difference; } if(length == 1) return; //array copy for(int i=0; i<length<<1; i++){ output[i] = input[i]; } } } 一応作ってみた。 確認お願い!
374 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 21:27:54 ] >>373 ああ…ありがたい 今確認します!!!どうもありがとう!!!!涙出てきた
375 名前:デフォルトの名無しさん [2007/10/27(土) 22:51:52 ] [1] 授業単元: C言語入門 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5163.txt [3] 環境 [3.1] OS:Windows [3.3] 言語: C言語 [4] 期限: 10月28日午前12時30分まで よろしくおねがいします
376 名前:aho mailto:sage [2007/10/27(土) 23:01:10 ] 課題1 int sqr(int x){ return x * x; } int pow4(int x){ return sqr(x) * sqr(x); }
377 名前:デフォルトの名無しさん [2007/10/27(土) 23:01:24 ] >>375 最後のだけやってもいいよ 任意サイズでやってやるぜ
378 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:01:32 ] 関数sqrってなんだ?sqrtの間違い? でもなんで四乗値求めるのに平方根必要?
379 名前:aho mailto:sage [2007/10/27(土) 23:02:37 ] 課題2 void hello(void){ printf("こんにちは。\n"); return; }
380 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:02:42 ] squareって事ね。
381 名前:デフォルトの名無しさん [2007/10/27(土) 23:12:34 ] 任意サイズの2次配列を引数にするにはどうすればいい?
382 名前:aho mailto:sage [2007/10/27(土) 23:14:56 ] 課題3 void rev_intary(int vc[], int no){ int i; int* tmp = (int*)malloc(sizeof(int) * no); /* noをコピーしておく */ for(i=0; i<no; i++) tmp[i] = vc[i]; for(i=0; i<no; i++) vc[i] = tmp[no-1-i]; free(tmp); return; } stdlib.hをインクルードするように!
383 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:15:02 ] 配列のポインタかポインタのポインタを使う
384 名前:デフォルトの名無しさん [2007/10/27(土) 23:20:08 ] >>383 サイズをどうやって保存するの?
385 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:22:02 ] パンチで
386 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:22:17 ] 保存はできない。引数でサイズ指定するしかない。
387 名前:168 [2007/10/28(日) 00:20:59 ] >>357 ありがとうございます。 続きはやっていただけませんか?
388 名前:デフォルトの名無しさん [2007/10/28(日) 00:21:53 ] これうまくいかないけどなぜでしょうか?サイズがちゃんと求まりません #include <iostream> #include <vector> using namespace std; void sizehyoji(vector< vector<int> > x){ int m,n; m=sizeof(x)/sizeof(x[0]); n=sizeof(x[0])/sizeof(x[0][0]); printf("%d %d",m,n);} main(){ int i,j,M=200,N=100; vector< vector<int> > x; x.resize(M); for(i=0;i<M;i++)x[i].resize(N); for(i=0;i<M;i++)for(j=0;j<N;j++)x[i][j]=0; sizehyoji(x);}
389 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 00:24:21 ] >>388 vectorはsize()を使え
390 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 00:26:59 ] >>375 課題3 void rev_intary(int vc[], int no) { int temp, i, n = no / 2; for(i=0; i<n; i++) { temp = vc[i]; vc[i] = vc[no-1-i]; vc[no-1-i] = temp; } }
391 名前:デフォルトの名無しさん [2007/10/28(日) 00:27:20 ] >>389 できました vectorでやればサイズ渡せますね #include <iostream> #include <vector> using namespace std; void sizehyoji(vector< vector<int> > x){ printf("%d %d",x.size(),x[0].size());} main(){ int i,j,M=200,N=100; vector< vector<int> > x; x.resize(M); for(i=0;i<M;i++)x[i].resize(N); sizehyoji(x);}
392 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 00:32:19 ] >>375 課題4 void mul(const int ma[2][3], const int mb[3][2], int mc[2][2]) { int i, j, k; for(i=0; i<2; i++) { for(j=0; j<2; j++) { for(k=0; k<3; k++) mc[i][j] += ma[i][k] * mb[k][j]; } } }
393 名前:デフォルトの名無しさん [2007/10/28(日) 01:01:51 ] 任意サイズのやつやろうとしたけど面倒になった あとでやるかもしれない 書き込んでおく #include <iostream> #include <vector> using namespace std; class Gyouretu { vector< vector<int> > x; public: Gyouretu(){Gyouretu(1,1);} Gyouretu(int M,int N){int i,j;x.resize(M);for(i=0;i<M;i++)x[i].resize(N); for(i=0;i<M;i++)for(j=0;j<N;j++)x[i][j]=0;} resize(int M,int N){Gyouretu(M,N);} Gyouretu& Gyouretu::operator=(Gyouretu& y){ if(&x!=this){} return *this;} }; main(){ Gyouretu x; x.resize(6,5);}
394 名前:デフォルトの名無しさん [2007/10/28(日) 04:31:04 ] 全ディレクトリのファイルでサイズが一致するものをプルパスで出力せよ
395 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 04:38:32 ] プルパスについてkwsk
396 名前:デフォルトの名無しさん [2007/10/28(日) 04:42:58 ] 植田佳奈 さんってこんな人だったの・・・? 相手の人、可哀想;; www.nicovideo.jp/watch/sm1282003 25分14秒付近より ●植田佳奈、最近人生を丸投げしたくなることは?というフリに、「こないだー、悪口を絶賛喋ってた ら、後ろに本人いて(笑)あんなことほんとにあるんだ!って思って、超びっくりしちゃった(笑) 実名って言うかその人しかあり得ないような悪口をバンバン言ってたの。そしたら、”そんな風に思っ てたんだ、ごめんね”って逆に謝られちゃって…(笑)」