C++ | Napisz program, który wypisze w dwóch kolumnach x i f(x), gdzie x jest liczbą rzeczywistą z przedziału [0.5,10], zmieniającą się w n- iteracjach, Rozwiązanie przedstaw z wykorzystaniem funkcji, której argumentem formalnym jest wskaźnik na funkcję. Sprawdź działanie programu dla funkcji log10, log i exp z biblioteki cmath, zależnie od wyboru użytkownika.


Odpowiedź :

Odpowiedź:

#include <cmath>

#include <iostream>

void func_table(double (*f)(double), float min, float max, int steps) {

 // potrzebne do wyliczenia kolejnego X na podstawie numeru iteracji

 float ratio = (max - min) / (steps - 1);

 for (int i = 0; i < steps; i++) {

   float x = (i * ratio) + min;

   std::cout << x << "\t" << (*f)(x) << std::endl;

 }

}

int main() {

 int steps = 10;   // ilość iteracji

 float min = 0.5;  // początek dziedziny

 float max = 20;   // koniec dziedziny

 // przykłady

 func_table(log, min, max, steps);

 func_table(log10, min, max, steps);

 func_table(exp, min, max, steps);

  return 0;

}

Wynik działania programu:

---log--

0.5 -0.693147

2.66667 0.980829

4.83333 1.57554

7 1.94591

9.16667 2.21557

11.3333 2.42775

13.5 2.60269

15.6667 2.75154

17.8333 2.88107

20 2.99573

---log10--

0.5 -0.30103

2.66667 0.425969

4.83333 0.684247

7 0.845098

9.16667 0.962211

11.3333 1.05436

13.5 1.13033

15.6667 1.19498

17.8333 1.25123

20 1.30103

---exp--

0.5 1.64872

2.66667 14.3919

4.83333 125.629

7 1096.63

9.16667 9572.67

11.3333 83561.1

13.5 729416

15.6667 6.36718e+06

17.8333 5.558e+07

20 4.85165e+08

Mam nadzieje, że o takie coś chodziło.

Uwagi:

Jeżeli chodziło o przedział 0.5 do 10 co np. 0.5 to wystarczy zamienić funkcję na taką z nie do końca poprawnym forem:

void func_table(double (*f)(double)) {

 for (float i = 0.5; i <= 10; i+=0.5) {

   std::cout << i << "\t" << (*f)(i) << std::endl;

 }

}