質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

1218閲覧

エラーを解決する方法がわかりません(C言語)

jackie687456

総合スコア17

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2017/05/08 12:47

前提・実現したいこと
定積分を台形則とシンプソン則を用いて解析的に値を得る課題で、プログラムをC言語で書いていたのですが、次のようなエラーが出てしまい、解決方法がわかりません。
求めたい定積分は ∫_0^2π(sin(2x))dx です。
未熟な質問かもしれませんが、どうかご協力いただけませんでしょうか?

エラーメッセージ
「17行目」で記述エラーを発見しました。
「identifier」を付け忘れています。

ソースコード(C言語)
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

#define PI=4*arctan(1)

double f(double x){
double y;
y = sin(2 * x);
return y;
}

double Trapezoid(int N){
int n;
double h, I, sum = 0;

h = (PI - 0) / N; ←エラーの該当箇所です for (n = 1; n <= N - 1; n++){ sum += f(0 + n*h); } I = h*(f(0) / 2 + sum + f(PI) / 2); return I;

}

double Simpson(int N){
int n;
double h, I, sum1 = 0, sum2 = 0;

h = (PI - 0) / N; for (n = 1; n <= N / 2 - 1; n++){ sum1 += f(0 + 2 * n*h); } for (n = 1; n <= N / 2; n++){ sum2 += f(0 + (2 * n - 1)*h); } I = (h / 3)*(f(0) + f(PI) + 2 * sum1 + 4 * sum2); return I;

}

int main(void){
int N=1000;
printf("%lf %lf\n",Trapezoid(N),Simpson(N));

return 0;

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

「arctan」という標準関数は用意されている記憶がありません。

投稿2017/05/08 12:52

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jackie687456

2017/05/08 13:06

自分の思い込みと調べ不足でした。ご指摘ありがとうございます。
guest

0

こんにちは。

C言語の標準ライブラリにあるアークタンジェント関数は、atan です。
あと、マクロ定義の文法を間違っています。#define PI 4*atan(1)ですね。

#ちょっと注意
teratailはMarkdownというお手軽に文字修飾できる書式を使っています。
例えば、上記は#ちょっと注意と書いてます。行頭の#はタイトル行の意味があります。
なので、普通にソースを貼り付けるとおかしな事になります。
質問欄の上の方にある<code>を押すと'''のような行が2行でてきますので、その間にソースを貼り付けましょう。

#include <math.h> #include <stdio.h> #include <stdlib.h> #define PI 4*atan(1) double f(double x){ double y; y = sin(2 * x); return y; } double Trapezoid(int N){ int n; double h, I, sum = 0; h = (PI - 0) / N; //←エラーの該当箇所です for (n = 1; n <= N - 1; n++){ sum += f(0 + n*h); } I = h*(f(0) / 2 + sum + f(PI) / 2); return I; } double Simpson(int N){ int n; double h, I, sum1 = 0, sum2 = 0; h = (PI - 0) / N; for (n = 1; n <= N / 2 - 1; n++){ sum1 += f(0 + 2 * n*h); } for (n = 1; n <= N / 2; n++){ sum2 += f(0 + (2 * n - 1)*h); } I = (h / 3)*(f(0) + f(PI) + 2 * sum1 + 4 * sum2); return I; } int main(void){ int N=1000; printf("%lf %lf\n",Trapezoid(N),Simpson(N)); return 0; }

投稿2017/05/08 13:06

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jackie687456

2017/05/08 13:22

teratailの使い方までご教授いただきありがとうございます。初めてこのサイトを利用させていただいたもので、質問の仕方がなっていませんでした。今後、気を付けていきたいと思います。
guest

0

ベストアンサー

C

1#define PI=4*arctan(1)

C

1#define PI 4*atan(1)

投稿2017/05/08 12:59

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jackie687456

2017/05/08 13:09

atanの標準関数の間違いだけでなく、#defineの使い方まで間違っていたんですね。お恥ずかしい限りです。正誤のプログラムも具体的に示していただき、とても助かりました。ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問