9  Wskaźniki na funkcję

  1. Napisz funkcję calculate, która przyjmuje dwa argumenty: wskaźnik na funkcję operation oraz liczbę całkowitą number. Funkcja operation ma przyjmować jeden argument typu int i zwracać wartość typu int. Funkcja calculate powinna wywołać funkcję operation z argumentem number i zwrócić jej wynik. Stwórz przypadek testowy.

  2. Napisz funkcję o nazwie applyFunction, która przyjmuje trzy argumenty: wskaźnik na funkcję func, która przyjmuje jeden argument typu int i zwraca int, oraz dwie liczby całkowite: start i end. Funkcja applyFunction powinna wywołać funkcję func dla każdej liczby w zakresie od start do end (włącznie) i wydrukować wyniki na standardowe wyjście. Stwórz przypadek testowy.

  3. Napisz funkcję, która otrzymuje trzy argumenty:

i zwraca 1, jeżeli otrzymane w argumentach funkcje mają ten sam znak dla wartości dla liczb całkowitych od 0 do \(n\), a zwraca 0 w przeciwnym wypadku. Stwórz przypadek testowy.

  1. Napisz funkcję calculateOperation, która przyjmuje jako argumenty: wskaźnik na funkcję operation, która przyjmuje dwa argumenty typu double i zwraca double, oraz dwa argumenty typu double - number1 i number2. Funkcja calculateOperation ma zwracać wynik wywołania funkcji operation na argumentach number1 i number2. Stwórz przypadek testowy.

  2. Napisz funkcję modifyAndSum, która ma przyjmować jako argument wskaźnik na funkcję modifier, która przyjmuje jeden argument typu int i zwraca int, oraz dwa argumenty typu int: number1 i number2. Funkcja modifyAndSum powinna modyfikować obie liczby za pomocą funkcji modifier i zwracać ich sumę. Przykładem funkcji modifier może być funkcja, która zwiększa liczbę o 1 lub zmienia znak liczby. Stwórz przypadek testowy.

  3. Stwórz funkcję applyCondition, która przyjmuje trzy argumenty: wskaźnik na funkcję condition zwracającą wartość typu int i przyjmującą int, wskaźnik na funkcję action również przyjmującą i zwracającą int, oraz wartość całkowitą value. Funkcja applyCondition powinna najpierw wywołać condition z value jako argumentem. Jeśli wynik to 1, applyCondition powinna następnie wywołać action na value i zwrócić wynik. W przeciwnym wypadku powinna zwrócić value bez zmian. Stwórz przypadek testowy.

  4. Stwórz funkcję executeSequence, która przyjmuje dwa argumenty: wskaźnik na funkcję operation zwracającą void i przyjmującą int oraz liczbę całkowitą count. Funkcja executeSequence powinna wywołać funkcję operation dokładnie count razy, przekazując jej jako argument kolejne liczby od 1 do count. Stwórz przypadek testowy.

  5. Stwórz funkcję modifyValue, która przyjmuje argument typu int oraz wskaźnik na funkcję modifier nie przyjmującą żadnych argumentów, ale zwracającą wartość typu int. Funkcja modifyValue powinna dodać do przekazanej wartości wynik wywołania funkcji modifier i zwrócić otrzymaną sumę. Stwórz przypadek testowy.

  6. Stwórz funkcję processPair przyjmującą dwie liczby całkowite oraz wskaźnik na funkcję processor, która zwraca double i przyjmuje dwa argumenty typu int. Funkcja processPair powinna wywołać processor z przekazanymi liczbami, zaokrąglić wynik w dół do najbliższej liczby całkowitej i zwrócić tę wartość jako int. Stwórz przypadek testowy.

  7. Stwórz funkcję transformLoop, która przyjmuje wskaźnik na funkcję transform zwracającą int i przyjmującą int, wartość początkową start oraz liczbę iteracji iterations. Funkcja powinna wykonać określoną liczbę iteracji, w każdej iteracji przypisując zmiennej wynikowej wartość zwróconą przez funkcję transform wywołaną na wyniku z poprzedniej iteracji (w pierwszej iteracji na wartości start). Na koniec funkcja powinna zwrócić finalną wartość. Stwórz przypadek testowy.

  8. Stwórz funkcję computeWithFallback, która przyjmuje trzy argumenty: wskaźnik na funkcję primary przyjmującą dwa parametry typu int i zwracającą int, wskaźnik na funkcję backup o takiej samej sygnaturze oraz dwie wartości całkowite a i b. Funkcja computeWithFallback powinna wywołać funkcję primary z argumentami a i b. Jeśli wynik funkcji primary jest mniejszy od zera, funkcja computeWithFallback powinna wywołać backup z tymi samymi argumentami a i b i zwrócić wynik tej funkcji. W przeciwnym przypadku (gdy wynik funkcji primary jest większy lub równy zero), funkcja computeWithFallback powinna zwrócić wynik funkcji primary. Funkcja computeWithFallback powinna zwracać wartość typu int. Stwórz przypadek testowy.