Zaawansowane CPP/Ćwiczenia 8: Metaprogramowanie

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Zadanie 1 Napisać szablon funkcji lub klasy wyliczający funkcję silnia:

Zadanie 2 Zmodyfikować szablon Sqrt tak aby liczył całkowite przyliżenie logarytmu liczby o dowolnej całkowitej podstawie P<N. Logarytm z liczby przy podstawie oznaczany to rozwiązanie równania:

Wskazówka Najpierw zaimplementuj szablon liczący dowolną (calkowitą) potęgę liczby całkowitej.

Zadanie 3

Wymyśl i zaimplementuj jako metaprogram, szybszy algorytm funkcji pow(x).

Wskazówka

Zadanie 4

Napisz szablon generujący, pierwsze N wyrazów rozwinięcia funkcji sin(x):

<N>

Zadanie 5

Napisz szablon generujący funkcję implementującą iloczyn skalarny dwu wektorów. Parametrem szablonu ma być dlugość możonych szablonów.

<N>

Zadanie 6

Napisz szablon generujący funkcję implementujący iloczyn macierzy NxM i wektora o M elementach:

 void matrix_v<N>(double *A,double *v,double *u)

powoduje obliczenie:

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \displaystyle \aligned u_0&= A_{0,0} v_0+A_{0,1} v_1+\cdots+A_{0,M-1} v_{M-1}\\ u_1&= A_{1,0} v_0+A_{1,1} v_1+\cdots+A_{1,M-1} v_{M-1}\\ &\vdots&\\ u_{N-1}&= A_{N-1,0} v_0+A_{N-1,1} v_1+\cdots+A_{N-1,M-1} v_{M-1}\\ \endaligned}

Tablica jest reprezentowana w pamięci zgodnie z konwencją C, tzn. elementowi odpowiada A[M*i+j].