C/C++の宿題を片付け ..
285:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/27 00:07:31
ふざけてんの
288:デフォルトの名無しさん
07/10/27 00:13:39
>>280
副作用乙
289:デフォルトの名無しさん
07/10/27 00:18:05
なんで6で割っているんだぜ?
290:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/27 00:47:03
Integral(f,a,b,d)って出来るの? 関数わたし
292:デフォルトの名無しさん
07/10/27 00:55:29
スマソ全然見てなかったわ
293:272
07/10/27 01:03:57
ありがとうございました
解説で分かってきたので色々と試してみます
294:291
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/27 01:26:36
>>294
出題者じゃないんだが。
typedef double (*func)(double);
これってなにやってるの?
297:57
07/10/27 01:29:04
>>228
自分も詳しい理由は分かりませんが、この再帰の問題以前にも、リストで
色々な動作をする関数を作ったので、その関数を作る時、関数に引数を
渡したりするのに、リストの先頭にデータを入れない方が都合が
良いんじゃないですかね?
リストは先頭にデータを入れないとばかり思ってたので、よく分かりませんが。
298:291
07/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:デフォルトの名無しさん
07/10/27 01:30:41
>>290
すいませんd=0.001となってるのが良く分からないんですが
300:291
07/10/27 01:31:39
>>299 細かくした方が値が正確になるって事だけだ d=0.1でいい
301:コッチェビン
07/10/27 01:32:28
なんかすごいシコシコしたい・・・
302:デフォルトの名無しさん
07/10/27 01:33:37
>>300
どうもです
303:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/27 01:35:47
ちなみに追い詰めてるわけじゃないです。数値あわせがしたいだけです。
計算結果に自信がないので。
305:291
07/10/27 01:36:19
>>303
呼び出すのはfでいいんだよ 引数でfとかgを指定するから
306:291
07/10/27 01:37:56
>>304
単純な定積分の値と比較したから正解だろう >>290で求めている
あと>>290はgが間違えていて
正しくは
double g(double x){return 1/sqrt(1+x*x*x*x);}
307:デフォルトの名無しさん
07/10/27 01:38:07
>そうしたらIntegral(func funcName,...)
スマソ。そうなってた。
308:デフォルトの名無しさん
07/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
07/10/27 01:41:38
>>308
Fがマクロだから使っている
あと使っていないのはaとbだ 勝手に(0,1)だとおもって書いてしまった
310:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/27 01:43:31
>>309
なるほどね。理解できました。
exp(-x*x)の関数名をfにしないでくれたらよかった。
312:デフォルトの名無しさん
07/10/27 01:53:03
>>294
粘着すまん。
6じゃなくて3で割らないといけなくないか?
h=0.1で指定されているし。
313:修正版
07/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:修正版
07/10/27 02:03:09
>>312
そもそも2hの幅で積分しろってことか それならそうだな
315:デフォルトの名無しさん
07/10/27 02:04:51
うがあぁ数値が合わない。
何が違うんだ。。。。。
316:修正版
07/10/27 02:07:29
>>312
でも最小の区間を与えた方が標準的だと思う
Integral(f, 0, 1, 0.2))と呼び出せば正解と一致する値が出るはずだ
317:デフォルトの名無しさん
07/10/27 02:11:03
>>316
考えてみる。
正解はちなみにいくつなんだ
俺は
result=1.560123
result=1.988458
そっちは
1.493648
1.854075
他の検証方法ってある?Excelあたりでできるもんかね?
318:デフォルトの名無しさん
07/10/27 02:12:30
あ。6->3にした値ね。
319:修正版
07/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:デフォルトの名無しさん
07/10/27 02:25:04
Excelで確認したところ俺もexp(-x*x)の単純な積分の値は
0.747508011
ぐらいになった。
では6で割るべきなのか。
321:デフォルトの名無しさん
07/10/27 02:28:04
6->3にした結果
俺
result=0.780061
result=0.994229
そちら
0.746825
0.927040
そっちの勝ちだ.orz
ノシ
322:デフォルトの名無しさん
07/10/27 02:28:58
間違えた
3->6
323:修正版
07/10/27 02:31:52
URLリンク(doiob.net)
この式よく見てみろ
hを算出するときに既に2で割っている 分割数nに対して2nで割っているからややこしいだけ
324:デフォルトの名無しさん
07/10/27 02:34:34
そういうことか・・・ややこしい。
325:デフォルトの名無しさん
07/10/27 02:40:23
便乗質問なんだけど
h=0.1で与えられてるから式の通りに3で割るんじゃないの?
の辺りがイマイチ理解できんので教えてくれ…
326:修正版
07/10/27 02:46:21
>>325
問題どおりにやるとひとつひとつの積分区間は2hなので
6で割る部分と打ち消しあって3になる
幅hの積分を求めるのではなく x とx+hとx+2hの三点を2次関数で近似したいと言うことなんだろう
だから2h幅になっている
327:修正版
07/10/27 02:48:01
>>325
原理、近似の方法はここに書いてある
Wikipedia項目リンク
328:デフォルトの名無しさん
07/10/27 02:54:49
ありがとうございます
329:デフォルトの名無しさん
07/10/27 03:05:21
>>287
ふざけてないです。
おおマジです。
330:デフォルトの名無しさん
07/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:修正版
07/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:デフォルトの名無しさん
07/10/27 04:12:10
何か邪魔臭くなっていましたね さんくすこ
333:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/27 08:35:59
すまん。寝ぼけて間違えた。
>>331でOK。
335:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/27 08:55:22
ひゃっほう。
337:デフォルトの名無しさん
07/10/27 10:08:16
なんでシンプソン公式だけでこんなにスレ進むんだよw
338:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/27 11:17:19
>>339
全くわかんなかったのに数分で解いてるよ(>_<)
ありがとうございました。
341:デフォルトの名無しさん
07/10/27 11:27:20
て言うか既出ネタだろ
>>235-237で
342:デフォルトの名無しさん
07/10/27 11:29:23
階乗は頻出の基本問題だし、このスレで答えてる人なら数分とかじゃなくて、問題見た瞬間に即答だろ。
343:デフォルトの名無しさん
07/10/27 11:49:08
テンプレレベルだよな・・・と思ったらwikiにも書いてないな
今から編集してくる
344:デフォルトの名無しさん
07/10/27 11:51:23
>>342さすがですね
勉強不足ですいません
345:デフォルトの名無しさん
07/10/27 12:09:39
×勉強不足
○勉強する気がない
346:デフォルトの名無しさん
07/10/27 12:13:00
LU分解とか死ねwwwwww
京大電電でつけど、プログラムの課題がイミフwwwwwwww
347:デフォルトの名無しさん
07/10/27 12:15:15
それ、プログラム以前の問題だろ
Fランの大学ですらやる基本的な問題だし
348:デフォルトの名無しさん
07/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] その他の制限: 特にありません
URLリンク(kansai2channeler.hp.infoseek.co.jp)
349:デフォルトの名無しさん
07/10/27 13:47:53
>>347
池沼でサーセンwwwww
350:デフォルトの名無しさん
07/10/27 14:08:07
348
こんなの面倒 授業でていたやつのほうが関数にくわしいだろ
351:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/27 16:12:53
2次元配列のサイズを調べる方法ありますか?
354:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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
07/10/27 16:35:47
機械に仕事を割り当てるところまでやった
すなわち、問題文の
>5種類の性能の異なる加工機械が各1台ある工場で、100種類の製品を作っている。
>各製品がその日に受注した場合、LT(完成までにかかる日数)を表示するスケジューリングプログラムを作成せよ。
>また、ランダムに発注があり、発注があった場合にのみ実際に機械は使用される。
>すなわち、発注が一度もなければ100日間ずっと同じLTが表示され、発注があれば、
>その日以降は機械が使用されているので、LTが長くなる可能性があるということ。
ところまで。
// 生産計画・生産管理
// 97th-res: >>168 (>>111, >>211, >>229)
// 2007/10/27
URLリンク(kansai2channeler.hp.infoseek.co.jp)
358:デフォルトの名無しさん
07/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:入力うまくいかない
07/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にしたら良くなったよ
07/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
07/10/27 16:54:35
>>358さん
>>359さん
早い回答ありがとうございました!
362:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/27 18:03:32
>>364
>>1読んでから書き直し
366:デフォルトの名無しさん
07/10/27 18:07:30
>>365
つまりテンプレ通りに書けってこった
とりあえずこのコードが何をするかぐらいは書いたほうがいい
367:デフォルトの名無しさん
07/10/27 18:20:27
>>357
根本的に考え方が間違ってるよ。
これは生産計画立案の問題。
368:デフォルトの名無しさん
07/10/27 18:20:53
(int[] input)これをcで引数一個で実現するのは無理では?
最後尾にNULL入れた配列が欲しくなったり、
サイズを持った構造体へのポインタにしたくなったり、
int *input, int sizeみたいに素直になりたかったり。
369:デフォルトの名無しさん
07/10/27 18:37:29
突っ込むところはinput.lengthこっちだろ
370:aho
07/10/27 19:02:35
>>364
今書いてて思ったけど何がしたいのかいまいち分からない。
sumとdifferenceを計算した後何でoutputを上書きするの?
どんどん足し込む仕様じゃないの?
とりあえず、今ので書いてみるよーん
371:aho
07/10/27 19:08:59
どうもごめんちゃーい。
最後の行のarrayCopyみてませんでした。
372:デフォルトの名無しさん
07/10/27 19:09:34
>>370
ものすごい助かります(;;
離散ウェーブレット変換
Wikipedia項目リンク
のHaarWavletというものです。
373:aho
07/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:デフォルトの名無しさん
07/10/27 21:27:54
>>373
ああ…ありがたい
今確認します!!!どうもありがとう!!!!涙出てきた
375:デフォルトの名無しさん
07/10/27 22:51:52
[1] 授業単元: C言語入門
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows
[3.3] 言語: C言語
[4] 期限: 10月28日午前12時30分まで
よろしくおねがいします
376:aho
07/10/27 23:01:10
課題1
int sqr(int x){
return x * x;
}
int pow4(int x){
return sqr(x) * sqr(x);
}
377:デフォルトの名無しさん
07/10/27 23:01:24
>>375 最後のだけやってもいいよ 任意サイズでやってやるぜ
378:デフォルトの名無しさん
07/10/27 23:01:32
関数sqrってなんだ?sqrtの間違い?
でもなんで四乗値求めるのに平方根必要?
379:aho
07/10/27 23:02:37
課題2
void hello(void){
printf("こんにちは。\n");
return;
}
380:デフォルトの名無しさん
07/10/27 23:02:42
squareって事ね。
381:デフォルトの名無しさん
07/10/27 23:12:34
任意サイズの2次配列を引数にするにはどうすればいい?
382:aho
07/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:デフォルトの名無しさん
07/10/27 23:15:02
配列のポインタかポインタのポインタを使う
384:デフォルトの名無しさん
07/10/27 23:20:08
>>383
サイズをどうやって保存するの?
385:デフォルトの名無しさん
07/10/27 23:22:02
パンチで
386:デフォルトの名無しさん
07/10/27 23:22:17
保存はできない。引数でサイズ指定するしかない。
387:168
07/10/28 00:20:59
>>357
ありがとうございます。
続きはやっていただけませんか?
388:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/28 00:24:21
>>388
vectorはsize()を使え
390:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/28 04:31:04
全ディレクトリのファイルでサイズが一致するものをプルパスで出力せよ
395:デフォルトの名無しさん
07/10/28 04:38:32
プルパスについてkwsk
396:デフォルトの名無しさん
07/10/28 04:42:58
植田佳奈 さんってこんな人だったの・・・?
相手の人、可哀想;;
URLリンク(www.nicovideo.jp)
25分14秒付近より
●植田佳奈、最近人生を丸投げしたくなることは?というフリに、「こないだー、悪口を絶賛喋ってた
ら、後ろに本人いて(笑)あんなことほんとにあるんだ!って思って、超びっくりしちゃった(笑)
実名って言うかその人しかあり得ないような悪口をバンバン言ってたの。そしたら、”そんな風に思っ
てたんだ、ごめんね”って逆に謝られちゃって…(笑)」
397:デフォルトの名無しさん
07/10/28 10:19:24
[2] 問題文(含コード&リンク):携帯の文字入力をコマンドプロンプトから行うプログラムをつくれ
[3] 環境
[3.1] OS: WindowsXP
[3.2] VisualStudio 2008
[3.3] 言語: C
[4] 期限: はやめに
途中までは作っているのですが、シンボルが重複しているみたいなエラーがでてしまいます
デバッグと、濁点等の変換処理を手伝ってもらえませんか?
Shift-jisでやろうと思うのですがこれでいいのかよくわかりません・・・
テンプレのうpろだに何故かうpできなかったので、別のうpろだを使いました
URLリンク(www.uploda.org)
よろしくお願いします
398:デフォルトの名無しさん
07/10/28 11:59:19
>>397
[1]が抜けてる
期限が曖昧
その上マルチ
そしてVisualStudio2008ってまだβ版だろ、そんなもん宿題に使うな
399:397
07/10/28 12:41:20
すいません。あせってて・・・
[1] 授業単元: C言語
期限:今日中になりました
VisualStudio2005でも同じエラーでした
400:デフォルトの名無しさん
07/10/28 14:14:11
>>352さん
>>355さん
お礼の返事送るのが遅れて申し訳ありませんでした
>>351の問題に答えていただきありがとうございました
401:デフォルトの名無しさん
07/10/28 15:58:29
1] 授業単元: c言語
[2] 問題文:1.文字列の先頭のアドレスを引数とし、
その文字列の中にある文字’A’を探してそれが何番目かを計算し、
‘A’があればその値を、なければ0を返値とする関数を作成せよ。
2.1.で作成した関数を用いて、自分の学籍番号をポインタに代入し、
その中で文字'A'を探してそれを先頭に持ってくるプログラムを作成せよ。
[3] 環境
[3.1] OS:windows
[3.2] VisualStudio2005
[3.3] 言語:c
[4] 期限:10月31日まで
[5] その他の制限:特になし
問題が2個ありますが、よろしくお願いします
402:デフォルトの名無しさん
07/10/28 16:08:15
#include<stdio.h>
fnc(char *c){
int n;
for(n=0;c[n]!='\0';n++)if(c[n]=='A')break;
if(c[n]=='A')return n+1; else return 0;
}
main(){
char c[]="btfguhnexthgd,gj.lhgjkgh,nfgnvhg";
printf("%d\n",fnc(c));
}
403:デフォルトの名無しさん
07/10/28 16:11:30
#include<stdio.h>
fnc(char *c){
int n;
for(n=0;c[n]!='\0';n++)if(c[n]=='A')break;
if(c[n]=='A')return n+1; else return 0;
}
main(){
int i,n;
char c[]="Gakusekibango ha AGS000123";
printf("%s\n",c);
n=fnc(c);
for(i=n-1;i>=0;i--)c[i]=c[i-1];c[0]='A';
printf("%s\n",c);
}
404:デフォルトの名無しさん
07/10/28 16:30:14
[1] 授業単元: C言語
[2] 問題文:整数nをscanfで入力後"prime"という関数を呼び出して、
nが素数ならば1(それ以外は0)を繰り返し、mainにて「○は素数です(ではありません)」
を表示させよ
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio 2005
[3.3] 言語: C
[4] 期限: ([2007年10月28日まで]
[5] その他の制限:if文を用いる
405:デフォルトの名無しさん
07/10/28 16:37:23
nが素数ならば1(それ以外は0)を返し、
だよな?
406:デフォルトの名無しさん
07/10/28 16:42:35
#include<stdio.h>
prime(int p){
int n,N=p/2;
for(n=2;n<N;n++)if(p%n==0)break;
if(n<N)return 0; else return 1;}
main(){
int p;
scanf("%d",&p);
if(prime(p))printf("%dは素数です",p); else printf("%dは素数ではありません",p);
}
407:デフォルトの名無しさん
07/10/28 16:46:57
>>406
N=p/2
でpが奇数だったらNに入るのはintじゃなさそうな気がする
408:デフォルトの名無しさん
07/10/28 16:47:22
#include<stdio.h>
prime(int p){ for(int n=2;n<p/2;n++)if(p%n==0)return 0;return 1;}
main(){
int p;scanf("%d",&p);
if(prime(p))printf("%dは素数です",p); else printf("%dは素数ではありません",p);}
409:デフォルトの名無しさん
07/10/28 16:48:53
>>407
#include<stdio.h>
main(){
int p=5;
int N=p/2;
printf("Nは%dです",N);
}
410:デフォルトの名無しさん
07/10/28 16:59:01
#include<stdio.h>
int prime(int p)
{
int n;
for(n=2; n<=p/2; n++) if(!(p%n)) return 0;
return 1;
}
int main(void)
{
int p;
scanf("%d",&p);
printf(prime(p) ? "%dは素数です" : "%dは素数ではありません", p);
return 0;
}
411:デフォルトの名無しさん
07/10/28 17:00:09
0 1
412:デフォルトの名無しさん
07/10/28 17:06:42
>>405
その通りでした。すいません
413:デフォルトの名無しさん
07/10/28 17:06:55
>>404
#include <stdio.h>
int prime(int n)
{
int i;
if(n<2) return 0;
for(i=2; i*i<=n; i++) if(n%i==0) return 0;
return 1;
}
int main(void)
{
int n;
scanf("%d", &n);
if(prime(n)==0) printf("%dは素数ではありません\n", n);
else printf("%dは素数です\n", n);
return 0;
}
414:デフォルトの名無しさん
07/10/28 17:43:11
cディレクトリのファイルでサイズが一致するものを出力せよ
415:デフォルトの名無しさん
07/10/28 18:10:14
はい。
416:デフォルトの名無しさん
07/10/28 18:10:35
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
8行10列の二次元配列においてです。
1行目の配列と2行目の配列を足します。(できた配列を配列Aとよぶ)
次に配列Aと3行目の配列を足します。(できた配列を配列Bとよぶ)
次に配列Bと4行目の配列を足します。(できた配列を配列Cとよぶ。)
次に
5行目の配列と6行目の配列を足します。(できた配列を配列aとよぶ)
次に配列aと7行目の配列を足します。(できた配列を配列bとよぶ)
次に配列bと8行目の配列を足します。(できた配列を配列cとよぶ。)
そして配列Cを1行目、配列cを2行目とする
2行10列の二次元配列を表示しろ。(つまり4行の配列をたせということです)
配列のそれぞれの足し算は別関数にて行いなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2007年10月29日まで
[5] その他の制限: なし
よろしくお願いします。
417:デフォルトの名無しさん
07/10/28 18:15:39
>>416
これはなにか物理的演算なのかな?
418:デフォルトの名無しさん
07/10/28 18:18:12
>>416
1行目から4行目の各成分をそれぞれ足してCとする。
5行目から8行目の各成分をそれぞれ足してcとする。
Cとcを横に並べて2x10にする。
という意味?
419:デフォルトの名無しさん
07/10/28 18:19:05
関数内はlogの加算にあとでかえますから。
logの加算じゃなかったらこんなめんどいことはしません。
420:デフォルトの名無しさん
07/10/28 18:21:16
8X10の配列を
4X10と4X10とみて、4行ずつ配列を足します。そしたら1X10と1X10になるでしょう?
でこの1X10と1X10をいっしょにして2X10というわけです。
対数の加算なので一辺には計算できないわけです
421:デフォルトの名無しさん
07/10/28 18:25:02
なんでこんな簡単なこともできないのに、そんなに偉そうなんだ?
422:デフォルトの名無しさん
07/10/28 18:27:08
>>420
言いたいことは分かるが4行ずつ配列を足してないだろ
423:デフォルトの名無しさん
07/10/28 18:28:55
#include <stdio.h>
void add(const int *a, int *b, int n)
{
while(n--) b[n] += a[n];
}
int main(void)
{
int a[8][10], b[2][10] = {0};
int i;
for(i=0; i<8; i++) add(a[i], b[i/4], 10);
return 0;
}
424:デフォルトの名無しさん
07/10/28 19:44:51
>>416
配列A, B, a, b は配列として必要なのか?
425:デフォルトの名無しさん
07/10/28 20:42:09
わかる人いますか?
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
以下のような内容のテキストファイルを読み込んで
それぞれ配列に格納した後、同じように出力せよ。
文章,文章,数字,数字,・・・,数字\n
文章,文章,数字,数字,・・・,数字\n
文章,文章,数字,数字,・・・,数字\n
ただし行数および数字の列数は常に不定とする。
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C/C++どちらでも可
[4] 期限: 2007年10月28日24:00まで
[5] その他の制限: 特になし
426:425
07/10/28 20:46:49
すみません。
読み込むのはtxtファイルじゃなくてcsvファイルでした。
よろしくおねがいします。
427:デフォルトの名無しさん
07/10/28 20:49:03
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): e^x = 1 + x^1/1! + x^2/2! + x^3/3! + x^4/4! + … を利用して e^x を計算する関数 double myexp(double x) を作成せよ.
k=0, 1, 2, 3, … について x^k/k! を加算してゆき, x^k/k!<10-6 となった時点で計算を打ち切るようにせよ
(無限ループと break 文を用いるのが一解法). main から myexp を呼び出し, x=1.0, 2.0, …, 10.0 に対して
myexp(x) の値を全体で 13 桁, 小数点以下 5 桁で表示せよ.
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語: C言語
[4] 期限: 2007年10月29日まで
[5] その他の制限:特になし
次レスがプログラムです。実行はされますが値がおかしいです…
よろしくお願いします。
428:デフォルトの名無しさん
07/10/28 20:50:56
#include <stdio.h>
#include <math.h>
double myexp(double);
double x;
int main( void )
{
printf("\t x\t myexp(x)\n");
for(x=1.0;x<=10.0;x++)
{
printf("\t%.1f\t%13.5f\n",x,myexp(x));
}
return 0;
}
double myexp(double x)
{
double r=1.0,f=1.0,y=1.0;
int z,k;
for(k=1;;k++)
{
for(z=1;z<=k;z++)
{
r=r*z;
}
if(pow(x,k)/r<1.0e-6)
{
return f;
break;
}
f=f+pow(x,k)/r;
}
}
429:とくめい
07/10/28 21:06:55
すみませんがプログラミングの宿題を教えてください。
「言語」= c++
「問題」= 速度のfileを読み込みそれを微分して加速度を求めろ。速度を積分して距離を求めろ
なおプログラムは1通です。
「os] = xp micro studio 2005
430:とくめい
07/10/28 21:09:09
上の追加です。
去年の参考にfile名は何でもいいので
#include<stdio.h>
FILE * fp1,* fp2,* fp3; //ファイルポインタの宣言
int main()
{
double k1=0,k;//k1=一つ前の距離、k=距離
double s1=0,s;//s1=一つ前の速度、s=速度
double T=0.4;//刻み値(台形の高さ)
fp1 = fopen( "C:\\suzuki2\\car06spd.txt", "r" );//ファイルを読み込みで開く
fp2 = fopen( "C:\\suzuki2\\sekibun.txt", "w" );//ファイルを書き込みで開く
if( fp1 == NULL ){//fp1にデータがあるか確かる
printf("ファイルが開けません。\n");
fclose( fp1 );
}
431:とくめい
07/10/28 21:10:28
書き込めなかったので2分割しました
while( 1 ) {//無限ループ(微分)
if( fscanf( fp2,"%lf",&k) == EOF ) break;//ファイルを読み終えたらループから抜ける
s=(k-k1)*2/T*3600-s1;//速度(s)の式 、単位変換を行う
fprintf(fp3,"%.0lf\n",s);//ファイルに速度sを出力する
k1=k;//k1にkの値を入れる
s1=s;//s1にsの値を入れる
}
fclose( fp2 );//ファイルを閉じる
fclose( fp3 );//ファイルを閉じる
return 0;
}
432:デフォルトの名無しさん
07/10/28 21:13:10
[1] 授業単元: C言語入門
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C言語
[4] 期限: 10月29日午前1時まで
よろしくお願いします
433:デフォルトの名無しさん
07/10/28 21:14:25
>>425#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
main(){
string str="",buf;
fstream fp("text.csv",ios::in);
do {getline(fp, buf);str+=buf+"\n";}while(!fp.eof());
int m,n;vector<string> x;
do{
m=str.find(",");n=str.find("\n");
if(m>n){x.push_back(str.substr(0,n));x.push_back("\n");m=n;}
else x.push_back(str.substr(0,m));
str=str.substr(m+1);}while(m>=0);
for(n=0;n<x.size();n++)cout<<x[n];
}
434:デフォルトの名無しさん
07/10/28 21:24:59
// >>427 eのマクローリン展開
#include <stdio.h>
#include <math.h>
double myexp(double);
double x;
int main( void )
{
double x;
printf("\t x\t myexp(x)\t exp(x)\n");
for(x=1.0;x<=10.0;x++)
{
printf("\t%2.1f\t%13.5f\t%13.5f\n", x, myexp(x), exp(x));
}
return 0;
}
double myexp(double x)
{
double s = 0.0;
double a = 1.0;
s += 1.0;
for (int n = 1; n < 20; n++) {
a = a * x / n;
s = s + a;
}
return s;
}
435:デフォルトの名無しさん
07/10/28 21:26:58
/*
e^x を計算する関数 double myexp(double x) を作成せよ.
k=0, 1, 2, 3, … について x^k/k! を加算してゆき,
x^k/k!<10-6 となった時点で計算を打ち切る
main から myexp を呼び出し,
x=1.0, 2.0, …, 10.0 に対して
myexp(x) の値を全体で
13 桁, 小数点以下 5 桁で表示せよ.
*/
#include <stdio.h>
#include <math.h>
double myexp(double x){
double r=1,sum=0;
for(int k=1;;k++){
sum+=r;
r*=x/k;
if(r < 1.0e-6)return sum;}}
int main( void ){
double x;
printf("\t x\t myexp(x)\n");
for(x=1.0;x<=10.0;x++){
printf("\t%.1f\t%13.5f\n",x,myexp(x));
}
return 0;
}
436:デフォルトの名無しさん
07/10/28 21:28:11
// >>427 e(x)の計算 さっきのはforのなかで宣言があったんでC++
#include <stdio.h>
#include <math.h>
double myexp(double);
int main( void )
{
double x;
printf("\t x\t myexp(x)\t exp(x)\n");
for(x=1.0;x<=10.0;x++)
{
printf("\t%2.1f\t%13.5f\t%13.5f\n", x, myexp(x), exp(x));
}
return 0;
}
double myexp(double x)
{
double s = 0.0;
double a = 1.0;
int n;
s += 1.0;
for (n = 1; n < 20; n++) {
a = a * x / n;
s = s + a;
}
return s;
}
437:デフォルトの名無しさん
07/10/28 21:28:25
[1] 授業単元: データ1
[2] 問題文(含コード&リンク): 長いのでうpしました。
簡易電卓を作成する問題です。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C
[4] 期限:11/7まで
[5] その他の制限:GUIで作ってはいけないそうです。
よろしくお願いします。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5005日前に更新/157 KB
担当:undef