Zaawansowane CPP/Ćwiczenia 8: Metaprogramowanie: Różnice pomiędzy wersjami
Nie podano opisu zmian |
|||
Linia 1: | Linia 1: | ||
{{cwiczenie|1|| | |||
Napisać szablon funkcji lub klasy wyliczający | |||
funkcję silnia: | funkcję silnia: | ||
<center><math>\displaystyle | <center><math>\displaystyle | ||
n!=n(n-1)(n-2)\cdots 1 | n!=n(n-1)(n-2)\cdots 1 | ||
</math></center> | </math></center> | ||
}} | |||
{{cwiczenie|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 12: | Linia 16: | ||
P^{\log_P(N)}=N | P^{\log_P(N)}=N | ||
</math></center> | </math></center> | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> | |||
Najpierw zaimplementuj szablon liczący dowolną (calkowitą) | Najpierw zaimplementuj szablon liczący dowolną (calkowitą) | ||
potęgę liczby całkowitej. | potęgę liczby całkowitej. | ||
</div></div> | |||
{{cwiczenie|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>. | ||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> | |||
<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 | ||
</math></center> | </math></center> | ||
</div></div> | |||
{{cwiczenie|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 | ||
Linia 33: | Linia 37: | ||
\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)!} | ||
</math></center> | </math></center> | ||
}} | |||
{{cwiczenie|5|| | |||
Napisz szablon generujący funkcję implementującą iloczyn skalarny dwu wektorów. | Napisz szablon generujący funkcję implementującą iloczyn skalarny dwu wektorów. | ||
Linia 41: | Linia 45: | ||
\operatorname{inner} </math> <N> <math>\displaystyle (x,y)=x_1 y_1+\cdots y_N x_N | \operatorname{inner} </math> <N> <math>\displaystyle (x,y)=x_1 y_1+\cdots y_N x_N | ||
</math></center> | </math></center> | ||
}} | |||
{{cwiczenie|6|| | |||
Napisz szablon generujący funkcję implementujący iloczyn macierzy | Napisz szablon generujący funkcję implementujący iloczyn macierzy | ||
Linia 59: | Linia 63: | ||
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 18:56, 10 wrz 2006
Ćwiczenie 1
Napisać szablon funkcji lub klasy wyliczający funkcję silnia:
Ćwiczenie 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:
Ćwiczenie 3
Wymyśl i zaimplementuj jako metaprogram, szybszy algorytm funkcji pow(x)
.
Ćwiczenie 4
Napisz szablon generujący, pierwsze N
wyrazów rozwinięcia funkcji
sin(x)
:
Ćwiczenie 5
Napisz szablon generujący funkcję implementującą iloczyn skalarny dwu wektorów. Parametrem szablonu ma być dlugość możonych szablonów.
Ćwiczenie 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]
.