• 締切済み

台形則のプログラミング

http://www.sist.ac.jp/~suganuma/cpp/2-bu/7-sho/C++/daikei.txt このサイトのプログラミングを参考にして、いろいろいじっているのですが、分割数、積分範囲の指定、積分する関数の変更 がよくわかりません。 具体的には、 分割数、範囲は改めて数を宣言するのか?それともこのプログラミングにある、x1、x2などにそのまま代入するのか? 関数は真ん中にあるreturn ~の部分だけ変更すればいいのか? ということがわかりません。 回答、アドバイス等ありましたらお願いします!

みんなの回答

noname#119918
noname#119918
回答No.2

何か具体的なある関数を積分したいということでしょうか。 それとも、このプログラムを改良し、機能・利便性等を高めたいということでしょうか。

hatouiru
質問者

お礼

今回は前者にあたります。 結局main関数の部分をいじって目的を達成できました。すみません。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

> いろいろいじっている どんな風にいじっていますか? お手持ちのソースコードを提示してみるお考えはありますか?

hatouiru
質問者

お礼

今回は具体的な別の関数を積分したかったのですが、main関数の部分を変更したらできました。すみません。

関連するQ&A

  • 関数の最大値を遺伝的アルゴリズム(GA)を使って解くプログラミングについてですが

    http://www.sist.ac.jp/~suganuma/cpp/3-bu/18-sho/18-sho.htm#e-18-10 こちらのページの真ん中やや下あたりで巡回セールスマン問題や関数の最大値を遺伝的アルゴリズムを使って求めるプログラミングが紹介されていますが、ここに乱数の初期値12345というのがあります。 この12345というものがプログラムの中でどこでどのように扱われているかがわかりません。乱数の初期値がseedで表されているのは分かるのですが… 詳しい方教えてください。お願いします。 関数の最大値を求めるプログラムhttp://www.sist.ac.jp/~suganuma/cpp/3-bu/18-sho/genetic/C++/gene_f.txt ( ケーススタディデータというところに書かれてある 12345 data\species.10 data\data10.tsp 123 data\species.10 data\data10.tsp 1 data\species.10 data\data10.tsp の12345 123 1の部分が乱数の初期値でこれがseedとなっているのは分かるのですがこの数値が適応度などにどう関係してくるのか分かりません>< ) 巡回セールスマン問題 http://www.sist.ac.jp/~suganuma/cpp/3-bu/18-sho/genetic/C++/gene.txt

  • 遺伝的アルゴリズムのプログラミングについてですが・・・

    遺伝的アルゴリズムのプログラムの基本的な流れが↓のページ http://www.sist.ac.jp/~suganuma/kougi/other_lecture/SE/opt/GA/GA.htm に 【1.初期化 2.生物集団の評価 3.交叉 4.突然変異 5.各個体の評価 6.淘汰】と書かれてあるのですが、 f(x) = sin(3x) + 0.5sin(9x) + sin(15x + 50) [0.1]区間の最大値を求める↓のプログラム http://www.sist.ac.jp/~suganuma/cpp/3-bu/18-sho/genetic/C++/gene_f.txt  に当てはめるとどの部分がどこに当たるのでしょうか…(また、このプログラムはどこからどのように読んでいけばいいのでしょうか…)。一応コメントが書かれていますがよく分かりません><; わかる方がいらっしゃいましたらよろしくお願いしますm( _ _ )m また、遺伝的アルゴリズムのプログラミングをする際の注意点があれば教えてください。

  • プログラムのファイル分割。

    現在C++を学んでいるものです。 ソースファイルの分割についての質問です。よろしくお願いします。 環境はVisual Studio 2005です。 ファイルを      myheader.h      main.cpp      function.cpp と分ける事を考えると、例えば単純な int max(int num1, int num2){ if(num1 > num2) return num1; else return num2; } という関数を考えた場合、 myheader.hには関数maxの宣言int max(int num1, int num2);を。 function.cppには上記の関数maxの内容を。 そしてmain.cppで関数maxを使用するといったように分割し、実行することまでは自分でできます。 ですが、上記の関数をテンプレートを使って、どの型でも使用可能にするには、myheader.h、function.cppにはどのように記述したらよいでしょうか? テンプレートを使った関数は普通ですが、 template <class T> T max(T num1, Tnum2){ if(num1 > num2) return num1; else return num2; } というように記述したいと考えています。 よろしくお願いします

  • C++でのプログラミングについてです

    プログラミング初心者です C++で二次方程式の解のプログラムを作成したのですがうまく作動させることができません…どこがおかしいのでしょうか、またどのように変更すればよいでしょうか 発生したエラーは 15行 型voidの値をintのエンティティに割り当てることはできません 34行 宣言が必要です 55行 宣言が必要です 15行 voidが他の型と同時に使われました 34行 '{'を見つけました(関数のヘッダーがないかもしれません). 68行 構文エラー:'}' です よろしくお願いいたします #include<stdlib.h> #include<math.h> void solve(double, double, double); int main(void) { double a, b, c; /*二次方程式の定数*/ double D, x1, x2, r1, r2; int ret; printf("ax^2 + bx + c = 0 の係数 a, b, c を入力してください---> \n"); scanf_s("%lf %lf %lf", &a, &b, &c); printf("2次方程式を解いた結果は次の通りです。\n"); ret = solve(a, b, c, &x1, &x2, &r1, &r2); switch (ret) { case-1: printf("係数がおかしい\n"); break; case 0: printf("解は虚数解で%.2f+%.2fi と%.2f-%.2fi です\n", r1, r2, r1, r2); break; case 1: printf("解は実数解となり、%f です。\n", x1); break; case 2: printf("解は実解解で、%f と %f です。¥n", x1, x2); break; } return 0; } void solve(double a, double b, double c, double x1, double x2, double r1, double r2); { if (a == 0.0) { if (b == 0.0) { return -1; } { x1 = -c / b; return 1; } } else { D = b * b - 4 * a * c; if (D >= 0) { x1 = (-b + sqrt(D)) / (2.0 * a); x2 = (-b - sqrt(D)) / (2.0 * a); return 1; } if (D == 0) { x1 = -b / (2 * a); return 1; } else { r1 = -b / (2 * a); r2 = sqrt(-D) / (2 * a); return 0; } } }

  • 構造体のアドレス渡し

    構造体をmain()からアドレス渡しで別関数(test.cpp)に渡し、その関数の中だけでの別関数test1()にその構造体を、値渡しでもアドレス渡しでも、渡せるのでしょうか? ちなみにmain.cppと、test.cppと、myhead.hとして分割コンパイルでやりました。 /*---------main.cpp--------*/ //ヘッダファイルで構造体宣言、test()のプロトタイプ宣言済み void main() { struct data dt[10]; ・・・・・・ test(dt); //test.cppのtest関数に構造体を渡す。 } /*---------test.cpp---------*/ void test1(??????); //test1()のプロトタイプ宣言 void test(struct data *p) //構造体をアドレス渡しで受け取った { ・・・・・ test1(?????); //test.cppで宣言したtest1関数に構造体を渡したい } どうかよろしくお願いします。

  • makefileってどうやるの?

    MircosoftVisualStudio.NETでプログラミングしている者です(短い言い方無いですか?^^;)。 makefileという物は作った事あるのですが、上記ソフトを使えば簡単に作成できそうな気がするのにやりかたがよくわかりません・・; 1.cppに書いてあるプログラム中から2.cppに書いてある関数を呼び出すなんて事も可能なんですよね? 1にも2にもインクルードは同じ宣言するのでしょうか? こういうことが学べるサイト等ご存知でしたら教えてください>< また、直々に教えてくださる方お願いします!><

  • 引数の個数を変えないで変数(定数)を扱う

    別に積分に限らないと思うのですが、積分を例にして質問させていただきます。 次のようなルーチンがあります。 integral( double (*func)(double), double a, double b ); /* a~bまで関数funcを積分する。 */ そこで、簡単に被積分関数を fx=3*x とすれば、 double fx(double x) { return 3*x; } というようにすれば良いですよね。 でも、例えば fx = exp(x-X) とか fx = x*X のような関数を積分したいときはどうすればよいのでしょうか? Xは変数ですが、xにはよらないので積分の中では定数とみなせます。 ループで X=0 のときにfxを積分 X=1 のときにfxを積分 X=2 のときにfxを積分… というようにしたいのですが、 fxの引数をfx(double x, double X) とすると、プロトタイプ宣言もルーチンの中も書き換えなければならなくなりますよね。 さらに fx = x-X + x' などとなったりすると、さらに書き換えなければならなくなり、せっかくの積分のルーチンをうまく使えません。 Xをグローバルで宣言する方法と、 プログラミングの前に、x-X を x' などと置きかえた式を実際に手計算で作る方法を思いついたのですが、 グローバル変数を使うのはあまりよくないし、手計算では簡単な場合しか置換を思いつかなかったりします。 fxの中で X を宣言して、 double fx(double x) { static double X; double y; y = x-X; X++; return y; } という方法も考えたのですが、どうもイマイチ良くないような… こういう場合に、良い方法はありますか? ここには簡単な関数を書きましたが、少し複雑な関数を積分するので。 質問の意図がうまく伝わらなかったらすいません。 書きにくかったです。

  • Cプログラミングの質問なのですが,

    Cプログラミングの質問なのですが, 以下のプログラムで正規乱数を発生させたいのですが,どこがおかしいのでしょうか? fp1のransuuはきちんとtxtで作成されています。 至急お助けください。 #include <stdio.h> #include<stdlib.h> #include<math.h> #define PI 3.141592653589793238 int main (void) { FILE *fp1,*fp2; int i,n; unsigned int x1,x2; double y1,y2; fp1=fopen("ransu.txt","r"); fp2=fopen("seikiransu.txt","w"); for(i=0;i<n;i++) { fscanf(fp1,"%lf",&x1); fscanf(fp1,"%lf",&x2); y1=sqrt(2)*sqrt(-2*log(x1))*cos(2*PI*x2); fprintf(fp2,"%lf\n",y1); } fclose(fp1); fclose(fp2); return 0; }

  • windowsプログラミング

    windowsプログラミングを始めたばかりの者です。 サンプルのhelloを書き換えたりして勉強しています。 都合上Fortranのサブルーチンを呼び出さなくてはいけないのですが、どうやってもうまくいきません。外部シンボルがエラーになってしまうのです。 windowsプログラミングでない場合はCからFortranを呼び出せたのですが・・・。 switch( wmId ) {   case IDM_ABOUT:      DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX,hWnd, (DLGPROC)About);      break;   case IDM_EXIT:      DestroyWindow( hWnd );      break;   case IDM_AAA:      BBB();----->これを呼び出したい!      MessageBox(hWnd , "終了しました", title,MB_OK | MB_ICONEXCLAMATION);      break;   default:      return DefWindowProc( hWnd, message,wParam, lParam ); } どこにプロトタイプ宣言や関数を書いていいのか等よく分かりません。詳しい方、ご教授よろしく願います。

  • プログラミングがわかりません

    1.多倍長数で表現した整数aとint型で表現した整数xを乗算し、その結果をaに格納するプログラムを作れ。 #include<stdio.h> #define KETA 12 int main(void){ int a[KETA] = { 0, 0, 0, 1, 0, 2, 4, 6, 5, 5, 3, 6}; int x = 512; /*必要な変数があれば適宣宣言しなさい*/ /*多倍長数(c) <-- 多倍長数(a) * int型(x)*/ (ア) 出力省略 return 0; } 実行結果 a = 52462354432 2.多倍長数を用いて1から80までの各整数の階乗を計算し、正しい値を表示するプログラムを作れ。 注意 80の階乗を表現するためには、少なくとも119桁の整数を格納できる多倍長数を用いなければならない。 実行結果 1! = 1 2! = 2 3! = 6 ・・・ 3.多倍長数で表現した整数aとint型で表現した整数xで除算し、その結果をaに格納するプログラムを作れ。 aがxで割り切れない場合に生じるあまりは使用せずに捨ててもよい。 除算の途中で現れる整数はint型で表現できる範囲であることを仮定してもよい。 ソースコード #include<stdio.h> #define KETA 12 int main(void){ int a[KETA] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1}; int x = 365; /*必要な変数があれば適宣宣言しなさい*/ /*多倍長数(a) <-- 多倍長数(a) ÷ int型(x)*/ (ア) return 0; } 実行結果 a = 33823777 2はまったくわかりません 1,3の出力はわかるのですが、計算過程がわかりません 教えてくださいよろしくお願いします。

専門家に質問してみよう