c,c++ 합성함수 계산하기 질문있습니다

안녕하십니까 코톡을 처음 알게되고 가입하게 되었습니다
수학 교수님께서 교재에 나오는 수학문제들을 프로그래밍 해오라는 리포트를 자주 내주셔서
그때마다 구글링을 해서 찾아보는 식으로 했었는데 F(x), G(x)함수를 정의하고 F(G(x)) 의 결과를
알아내는 소스는 찾을 수가 없어서 질문드립니다.
정말 기본 또는 그 이하 수준인지라

#include<stdio.h>

int main(){
int x=0; char F,G //일차방정식을 나타낼 때 char을 사용하는게 맞는지 모르겠습니다.
F=x+1; G=x+2;

이러고 막혀버렸…

char을 사용하는게 맞는지도 모르겠고 F와 G를 합치는 방법도 모르겠습니다
엉엉 도와주시면 감사하겠습니다

1 Like

어떤 형태로 f(x)와 g(x)를 입력 받는건지, 또 f(x)와 g(x)의 형태는 어떤건지(ex. 일차함수) 등의 추가적인 정보가 있어야 할 것 같습니다.

정말 저렇게만 말씀하셨나요?

C언어에서 함수를 정의하는 법을 알아보셔야 할 것 같습니다. C언어 책을 살펴보세요.
아래는 예시입니다.

#include <stdio.h>

int F(int x) {
  return 3 * x + 2;
}

int G(int x) {
  return x + 4;
}

int main() {
  int x;
  printf("x = ");
  scanf("%d", &x);

  int result = F(G(x));
  printf("F(G(x)) = %d", result);
}

이런 식으로 함수를 넘겨주면 됩니다

#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>

static double const eps = 1.0e-7;
double derivative(double F(double), double x) {
    double x_p = x + eps;
    double x_m = x - eps;
    return (F(x_p) - F(x_m)) / (x_p - x_m);
}

double is_almost_equal(double a, double b, double epsilon) {
    return fabs(a - b) < epsilon;
}

int main() {
    double sin_deriv_zero = derivative(sin, 0.0);
    assert(is_almost_equal(sin_deriv_zero, cos(0.0), eps));
    printf("Derivative of sin at %g : %g\n", 0.0, sin_deriv_zero);
}

정말 감사합니다 댓글 보기전에

#include<stdio.h>

int main() {
	int x = 2;  int F, G, FG;

	F = x + 1; G = x + 3;
	FG = G + 1;
	printf("F(G(x))의 값은: %d", FG);
}

이렇게 해봤는데 이제보니 좀 어거지로 끼워맞춘 느낌이네요…
1학기 책 다시 살펴보도록 하겠습니다

감사합니다
참고해서 열심히 해보겠습니다 :slight_smile:

C는 저렇게 함수 포인터를 넘겨주는 수밖에 없고
C++에서는 이렇게 재귀 템플릿으로 구현합니다.

#include <iostream>

template <typename F0, typename... F>
class Composer2 {
    F0 f0_;
    Composer2<F...> tail_;
public:
    Composer2(F0 f0, F... f) : f0_(f0), tail_(f...) {}

    template <typename T>
    T operator() (const T& x) const {
        return f0_(tail_(x));
    }
};

template <typename F>
class Composer2<F> {
    F f_;
public:
    Composer2(F f) : f_(f) {}

    template <typename T>
    T operator() (const T& x) const {
        return f_(x);
    }
};

template <typename... F>
Composer2<F...> compose2(F... f) {
    return Composer2<F...>(f...);
}

int f(int x) { return x + 1; }
int g(int x) { return x * 2; }
int h(int x) { return x - 1; }

int main() {
  std::cout << compose2(f, g, h)(42); // f(g(h(42)))
  return 0;
}

넵 과제 내주실때 받아 적는데 그냥 합성함수 계산하는 프로그램을 만들어오라고 말씀하셔서
일차함수로 해보는 중입니다!

무슨 과인지, 또 진도가 얼마나 나갔는지에 따라 문제 해석이 달라질 것 같습니다. 비전공자나 아직 진도를 많이 나가지 않은 상태라면 @Deneb 님께서 올리신 쪽이 교수님의 의도에 맞을 것 같고, 그게 아니라면 @frozenca 님께서 올리신 쪽이 교수님의 의도에 맞을 것 같습니다. 혹은 문자열로 f(x)와 g(x)를 받아 파싱해서 함수를 합성하는 문제였을 수도 있고… 혹시 원하신다면 그것도 올려드리겠습니다.

다만 C언어는 조금 더 열심히 공부하시는게 좋을 것 같습니다. 파이팅! :joy: