Zaawansowane CPP/Ćwiczenia 8: Metaprogramowanie: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
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 jest reprezentowana w pamięci zgodnie z konwencją C
, tzn.
elementowi odpowiada A[M*i+j]
.