2014-02-24 4 views
0

그래서 커브 아래 영역을 계산하는 주 함수를 만들려고합니다. 나는 각각 다른 방식으로 영역을 계산하는 3 개의 개별 함수를 가지고 있습니다 : 함수 1은 사다리꼴 규칙을 사용하여 계산하고, 함수 2는 Simpsons 규칙을 사용하여 계산하고 함수 3은 가우스 구적법을 사용하여 계산합니다. 나는 각각의 개별 프로그램을 잘 작동시키고 있었고 이제는 main에서 function으로 변경하여 "numericalIntegration"이라는 별개의 메인에서 호출하려고합니다.C에서 외부 함수를 호출

지금까지 내 주요 위해 가지고 :

나는 세 가지 별도의 기능을 포함거야하지만 지금은 그들을 제외 것이 짧은 게시 유지하기 위해 필요한 경우
#include <math.h> 
#include <stdlib.h> 

#define pi 3.1415927; 

void TrapezoidRule(float area); 
void SimpsonsRule(float area); 
void GaussQuadrature(float area); 

int main() { 

int userInput, N; 
float area, error; 

    printf("Choose which method to use to calculate the area of the function sin(x) from 0 to pi:\n"); 
    printf("Enter 1 to use the Trapezoid Rule, enter 2 to use Simpson's Rule, enter 3 to use Gauss' Quadrature.\n"); 
     scanf("%d", &userInput); 
     printf("\nEnter the number of intervals to use to calculate the area.\n"); 
     scanf("%d", &N); 

     if (userInput == 1) {    //Call Trapezoid rule function 
      TrapezoidRule(area); 
      } 
     if (userInput == 2) { 
      SimpsonsRule(area); 
      } 
     if (userInput == 3) { 
      GaussQuadrature(area); 
     } 

     //Print the area calculated using the chosen method  
return 0; 

} 

. 그들은 서로라고 : 나는 를 컴파일 할 때 내가 갖는

void TrapezoidRule(float area) { 
void GaussQuadrature(float area) { 
void SimpsonsRule(float area) { 

한 오류 (icc -o num numericalIntegration.c GaussQuadrature.c TrapezoidRule.c SimpsonsRule.c 사용) 는 사다리꼴 규칙과 심슨의 규칙이 모두 라디안으로 변환하는 그들에 작은 기능을 사용하는 것이이다 나는 수치 적 통합에서 적절히 부름 받고 있지 않다고 생각한다.

그래서 여기 내 구체적인 질문은 다음과 같습니다

  1. 이 방법은 메인에있는 함수를 호출 맞습니까?
  2. 도를 라디안으로 만들면 헤더 파일을 주 기능에 포함시켜야합니까? 나는 ...

UPDATE이 작업을 수행하는 방법을 잘 모르겠어요 : 내가지고있어 오류가 말한다 : 1 오류 : 2 오류 " 'degtorad'의 여러 정의"처음 여기에 정의 된

제가 degtorad 함수를 헤더 파일로 만들 필요가 있다고 생각하지만이 방법을 모릅니다.

+1

산문에 오류 메시지를 설명하지 마십시오. 컴파일러에서 생성 한 100 % 잘라내어 붙여 넣기하십시오. * 미해결 된 상징 * 같은 것을 말하고 있습니까? – Jens

+0

'pi'를 정의 할 필요가 없으며,''는 이미'M_PI'을 가지고 있습니다 - 최소한해야합니다. – drahnr

+0

'M_PI'는 표준이 아닙니다. –

답변

0

수학 라이브러리 libm.a과 (과) 연결을 잊어 버렸을 가능성이 있습니다. 최종 링크 단계를 수행하는 컴파일러 호출에 -lm을 추가하여 수행하십시오.

0

을 포함하는 소스를 컴파일해야합니다 ("도를 라디안으로 변환하는 작은 함수").

당신 type fun() { ... }fun.c에있는 경우 당신은 당신의 컴파일 명령 문자열로 포함되어야합니다 (.h는) 그 이야기

icc -o num fun.c numericalIntegration.c GaussQuadrature.c TrapezoidRule.c SimpsonsRule.c 
0

새 파일에서 이러한 기능을 정의하는 경우, 당신은 헤더 파일을 작성해야 함수처럼 보이는, 그리고 파일의 맨 위에 어떤 컴파일러는 헤더 파일에 다음

#include "GaussQuadrature.h" 
#include "TrapezoidRule.h" 
#include "SimpsonsRule.h" 

을 가지고, 당신은 (아마도) 단지 넣어해야합니다 :

void TrapezoidRule(float area); 
2

먼저 함수를 올바르게 호출하려면 먼저 프로토 타입을 선언해야합니다. 일반적으로 include 파일에서 가져 오지만 사용하기 전에 선언 할 수도 있습니다.이렇게하려면 main()하기 전에 다음 줄을 추가

void TrapezoidRule(float area); 
void GaussQuadrature(float area); 
void SimpsonsRule(float area); 

은 일반적으로 이러한에서 할 파일을 포함하지만 최종 결과는 동일하므로 C는 복사 - 붙여 넣기의 내용과 본질적으로 동일한 포함 파일을 포함 할 것이다. 더 많은 기능을 가지고 있거나 여러 곳에서 사용해야하는 경우에는 include 파일을 정말로 원할 것입니다.

그리고 하나의 파일에 정의되어 있지만 많은 곳에서 사용되는 유틸리티 기능이있는 경우 위와 마찬가지로 한 곳에서 사용하고 어디에서 사용할지 선언해야합니다. 또는 동일한 이름을 가진 많은 파일에서 유틸리티 기능을 사용하는 경우 static으로 지정하면 링커에서 동일한 기호의 여러 정의에 대해 불평하지 않습니다 (단, 동일한 함수 인 경우이 아이디어는 좋지 않습니다. 동일한 기능을하고 나중에 모두 변경해야 할 수도 있음).

관련 문제