微分係数を求めるプログラムを作っています

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
masuter

微分係数を求めるプログラムを作っています

#1

投稿記事 by masuter » 7年前

こんばんは。
高校生でC言語でプログラミングを学んでいます。
先日学校で、以下のような課題が出ました。

以下を満たすプログラムを完成させよ。
(1) 引数 x (double型)と n (int型)を与えて x^n の値を返すdouble型の関数 powerを定義。
(2) 引数 x (double型)と n (int型)を与えて x^n の微分係数((x^n)’の値,n x^(n -1)を計算してxの値を入れる)を返すdouble型の関数 diff を定義。ただし(1)の関数powerを呼び出して使うこと。
(3) main関数で 値 x と n を入力させ,関数 power と diff を呼び出し,それぞれの値を例のように表示させる。
  (注) 数学用ライブラリ関数(math.hのpowなど)は使えないとする。
<実行例>
x を 入力してください: 4.2
n を 入力してください(n>0): 5
x^n = 1306.912320
(x^n)' = 1555.848000

(1)は自分でできました。お聞きしたいのは(2)です。
まず、「ただし(1)の関数powerを呼び出して使うこと。」とありますが、違う計算をするのになぜ呼び出すのですか?呼び出す意味はありますか?

コード:

#include <stdio.h>

double power(double x, int n) {
	double y = 1;
	for (int i = 1; i <= n; i++)
		y = y*x;
	return y;
}
int main() {
	double num1 = 0;
	int num2 = 0;
	double d = 0;
	printf_s("xを入力してください\n>");
	scanf_s("%lf", &num1);
	printf_s("nを入力してください(nは自然数)\n>");
	scanf_s("%d", &num2);

	d = power(num1, num2);
	printf_s("%f^%d = %f です。\n", num1, num2, d);
	return 0;
}

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

Re: 微分係数を求めるプログラムを作っています

#2

投稿記事 by purin52002 » 7年前

数学の話に寄っていきます。
数学は苦手ですのでご了承ください^^;

今回は微分がわかっているので手打ちで計算すればいい気もしますが、
微分がわからない関数を微分する必要が出てくることがあります。

そういうときに導関数の公式を使います。

公式
(f(x+h)-f(x))/h (lim h->0)

プログラムでもこの公式を使うことで微分ができます。
(hは適当に小さい値にする)
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 微分係数を求めるプログラムを作っています

#3

投稿記事 by みけCAT » 7年前

masuter さんが書きました:まず、「ただし(1)の関数powerを呼び出して使うこと。」とありますが、違う計算をするのになぜ呼び出すのですか?呼び出す意味はありますか?
ここで呼び出す主な意味は、関数呼び出しの練習でしょう。
xの(n-1)乗を計算するので、power関数を使うといいでしょう。
オフトピック
purin52002 さんが書きました:数学の話に寄っていきます。
数学は苦手ですのでご了承ください^^;
どうしてわざわざ質問にほとんど関係ない上に苦手な数学の話に寄ったのですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

Re: 微分係数を求めるプログラムを作っています

#4

投稿記事 by purin52002 » 7年前

、、、完全に勘違いしていました^^;

てっきり微分を数値計算するためにpower関数を使え、ということかと思ったのですが
xの(n-1)乗を計算するために使えってことなんですね^^;

masuterさん、余計な話をして申し訳ないです<(__)>
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

box
記事: 2002
登録日時: 14年前

Re: 微分係数を求めるプログラムを作っています

#5

投稿記事 by box » 7年前

みけCAT さんが書きました: どうしてわざわざ質問にほとんど関係ない上に苦手な数学の話に寄ったのですか?
数学があまり得意でない方が数学に関する投稿をしてもいっこうに差し支えないのでは?
ここの掲示板には、ある分野があまり得意ではない方がその分野に関する投稿をしていけないという
ルールでもあるんですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 14年前

Re: 微分係数を求めるプログラムを作っています

#6

投稿記事 by box » 7年前

masuter さんが書きました: (1) 引数 x (double型)と n (int型)を与えて x^n の値を返すdouble型の関数 powerを定義。
(2) 引数 x (double型)と n (int型)を与えて x^n の微分係数((x^n)’の値,n x^(n -1)を計算してxの値を入れる)を返すdouble型の関数 diff を定義。ただし(1)の関数powerを呼び出して使うこと。
まず、「ただし(1)の関数powerを呼び出して使うこと。」とありますが、違う計算をするのになぜ呼び出すのですか?呼び出す意味はありますか?
この疑問に対する答えは、別の回答者さんからの回答のとおりです。
(2)においてべき乗を求める必要があります。その、べき乗を求める関数powerは、
(1)において自作されています。それを呼び出しましょう、ということです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 微分係数を求めるプログラムを作っています

#7

投稿記事 by みけCAT » 7年前

box さんが書きました:
みけCAT さんが書きました: どうしてわざわざ質問にほとんど関係ない上に苦手な数学の話に寄ったのですか?
数学があまり得意でない方が数学に関する投稿をしてもいっこうに差し支えないのでは?
ここの掲示板には、ある分野があまり得意ではない方がその分野に関する投稿をしていけないという
ルールでもあるんですか?
なんでわざわざ苦手だと宣言しながら関係なさそうな投稿をするのか不思議だっただけで、いけないとは言っていないです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

masuter

Re: 微分係数を求めるプログラムを作っています

#8

投稿記事 by masuter » 7年前

コード:

#include <stdio.h>

double power(double x, int n) {
	double r = 1;
	for (int i = 1; i <= n; i++)
		r = r*x;
	return r;
}
double diff(double x, int n) {
	double r = 0;
	r = n*power(x, n-1);
	return r;
}
int main() {
	double num1 = 0;
	int num2 = 0;
	double result1 = 0;
	double result2 = 0;
	printf_s("xを入力してください\n>");
	scanf_s("%lf", &num1);
	printf_s("nを入力してください(nは自然数)\n>");
	scanf_s("%d", &num2);

	result1 = power(num1, num2);
	result2 = diff(num1, num2);
	printf_s("%f^%d = %f です。\n", num1, num2, result1);
	printf_s("(%f^%d)' = %f です。\n", num1, num2, result2);

	return 0;
}
できました!ありがとうございました。

返信

“C言語何でも質問掲示板” へ戻る