Zaawansowane CPP/Ćwiczenia 8: Metaprogramowanie: Różnice pomiędzy wersjami
Linia 1: | Linia 1: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
'''Zadanie 1 ''' Napisać szablon funkcji lub klasy wyliczający | '''Zadanie 1 ''' Napisać szablon funkcji lub klasy wyliczający | ||
funkcję silnia: | funkcję silnia: | ||
Linia 10: | Linia 5: | ||
</math></center> | </math></center> | ||
− | '''Zadanie 2 ''' Zmodyfikować szablon <code><nowiki> Sqrt</nowiki></code> tak aby liczył | + | '''Zadanie 2 ''' Zmodyfikować szablon <code><nowiki>Sqrt</nowiki></code> tak aby liczył |
całkowite przyliżenie logarytmu liczby <math>\displaystyle N</math> o dowolnej całkowitej | całkowite przyliżenie logarytmu liczby <math>\displaystyle N</math> o dowolnej całkowitej | ||
podstawie <code><nowiki> P<N</nowiki></code>. Logarytm z liczby <math>\displaystyle N</math> przy podstawie <math>\displaystyle P</math> | podstawie <code><nowiki> P<N</nowiki></code>. Logarytm z liczby <math>\displaystyle N</math> przy podstawie <math>\displaystyle P</math> | ||
Linia 18: | Linia 13: | ||
</math></center> | </math></center> | ||
− | ''' | + | '''Wskazówka ''' |
Najpierw zaimplementuj szablon liczący dowolną (calkowitą) | Najpierw zaimplementuj szablon liczący dowolną (calkowitą) | ||
potęgę liczby całkowitej. | potęgę liczby całkowitej. | ||
Linia 24: | Linia 19: | ||
'''Zadanie 3 ''' | '''Zadanie 3 ''' | ||
− | Wymyśl i zaimplementuj jako metaprogram, szybszy algorytm funkcji <code><nowiki> pow(x)</nowiki></code>. | + | Wymyśl i zaimplementuj jako metaprogram, szybszy algorytm funkcji <code><nowiki>pow(x)</nowiki></code>. |
− | ''' | + | '''Wskazówka ''' |
<center><math>\displaystyle | <center><math>\displaystyle | ||
x^{(2 n)} = (x^2)^n,\quad x^{(2 n+1)} = x (x^2)^n | x^{(2 n)} = (x^2)^n,\quad x^{(2 n+1)} = x (x^2)^n | ||
Linia 33: | Linia 28: | ||
'''Zadanie 4 ''' | '''Zadanie 4 ''' | ||
− | Napisz szablon generujący, pierwsze <code><nowiki> N</nowiki></code> wyrazów rozwinięcia funkcji | + | Napisz szablon generujący, pierwsze <code><nowiki>N</nowiki></code> wyrazów rozwinięcia funkcji |
− | <code><nowiki> sin(x)</nowiki></code>: | + | <code><nowiki>sin(x)</nowiki></code>: |
<center><math>\displaystyle | <center><math>\displaystyle | ||
\sin </math> <N> <math>\displaystyle (x)=x-\frac{x^3}{3!}+\cdots +(-1)^{N+1}\frac{(x)^{2N-1}}{(2N-1)!} | \sin </math> <N> <math>\displaystyle (x)=x-\frac{x^3}{3!}+\cdots +(-1)^{N+1}\frac{(x)^{2N-1}}{(2N-1)!} | ||
Linia 50: | Linia 45: | ||
Napisz szablon generujący funkcję implementujący iloczyn macierzy | Napisz szablon generujący funkcję implementujący iloczyn macierzy | ||
− | <code><nowiki> NxM</nowiki></code> i wektora o <code><nowiki> M</nowiki></code> elementach: | + | <code><nowiki>NxM</nowiki></code> i wektora o <code><nowiki>M</nowiki></code> elementach: |
− | <nowiki> void matrix_v<N>(double *A,double *v,double *u) | + | <nowiki> void matrix_v<N>(double *A,double *v,double *u)</nowiki> |
− | </nowiki> | ||
powoduje obliczenie: | powoduje obliczenie: | ||
Linia 63: | Linia 57: | ||
\endaligned</math></center> | \endaligned</math></center> | ||
− | Tablica <math>\displaystyle A</math> jest reprezentowana w pamięci zgodnie z konwencją <code><nowiki> C</nowiki></code>, tzn. | + | Tablica <math>\displaystyle A</math> jest reprezentowana w pamięci zgodnie z konwencją <code><nowiki>C</nowiki></code>, tzn. |
− | elementowi <math>\displaystyle A_{i,j}</math> odpowiada <code><nowiki> A[M*i+j]</nowiki></code>. | + | elementowi <math>\displaystyle A_{i,j}</math> odpowiada <code><nowiki>A[M*i+j]</nowiki></code>. |
Wersja z 09:28, 3 wrz 2006
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)
:
Zadanie 5
Napisz szablon generujący funkcję implementującą iloczyn skalarny dwu wektorów. Parametrem szablonu ma być dlugość możonych szablonów.
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:
Tablica C
, tzn.
elementowi odpowiada A[M*i+j]
.