Zaawansowane CPP/Ćwiczenia 8: Metaprogramowanie: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 10: | Linia 10: | ||
Zmodyfikować szablon <code><nowiki>Sqrt</nowiki></code> tak aby liczył | Zmodyfikować szablon <code><nowiki>Sqrt</nowiki></code> tak aby liczył | ||
całkowite | całkowite przybliżenie logarytmu liczby <math>\displaystyle N</math> o dowolnej całkowitej | ||
podstawie < | podstawie <math>P<N</math>. Logarytm z liczby <math>\displaystyle N</math> przy podstawie <math>\displaystyle P</math> | ||
oznaczany <math>\displaystyle \log_P (N)</math> to rozwiązanie równania: | oznaczany <math>\displaystyle \log_P (N)</math> to rozwiązanie równania: | ||
<center><math>\displaystyle | <center><math>\displaystyle | ||
Linia 18: | Linia 18: | ||
}} | }} | ||
<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"> | <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ą ( | Najpierw zaimplementuj szablon liczący dowolną (całkowitą) | ||
potęgę liczby całkowitej. | potęgę liczby całkowitej. | ||
</div></div> | </div></div> | ||
Linia 32: | Linia 32: | ||
{{cwiczenie|4|| | {{cwiczenie|4|| | ||
Napisz szablon generujący, pierwsze < | Napisz szablon generujący, pierwsze <math>N</math> wyrazów rozwinięcia funkcji | ||
< | <math>sin(x)</math>: | ||
<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)!} | ||
</math></center> | </math></center> | ||
}} | }} | ||
Linia 41: | Linia 41: | ||
Napisz szablon generujący funkcję implementującą iloczyn skalarny dwu wektorów. | Napisz szablon generujący funkcję implementującą iloczyn skalarny dwu wektorów. | ||
Parametrem szablonu ma być dlugość | Parametrem szablonu ma być dlugość mnożonych szablonów. | ||
<center><math>\displaystyle | <center><math>\displaystyle | ||
\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 | ||
Linia 49: | Linia 49: | ||
Napisz szablon generujący funkcję implementujący iloczyn macierzy | Napisz szablon generujący funkcję implementujący iloczyn macierzy | ||
< | <math>NxM</math> i wektora o <math>M</math> elementach: | ||
<nowiki> void matrix_v<N>(double *A,double *v,double *u)</nowiki> | <nowiki> void matrix_v<N>(double *A,double *v,double *u)</nowiki> | ||
Linia 61: | Linia 61: | ||
\endaligned</math></center> | \endaligned</math></center> | ||
Tablica <math>\displaystyle A</math> jest reprezentowana w pamięci zgodnie z konwencją < | Tablica <math>\displaystyle A</math> jest reprezentowana w pamięci zgodnie z konwencją <math>C</math>, tzn. | ||
elementowi <math>\displaystyle A_{i,j}</math> odpowiada < | elementowi <math>\displaystyle A_{i,j}</math> odpowiada <math>A[M*i+j]</math>. | ||
}} | }} |
Wersja z 14:36, 12 wrz 2006
Ćwiczenie 1
Napisać szablon funkcji lub klasy wyliczający funkcję silnia:
Ćwiczenie 2
Zmodyfikować szablon Sqrt
tak aby liczył
całkowite przybliżenie logarytmu liczby o dowolnej całkowitej
podstawie . 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 wyrazów rozwinięcia funkcji :
Ćwiczenie 5
Napisz szablon generujący funkcję implementującą iloczyn skalarny dwu wektorów. Parametrem szablonu ma być dlugość mnożonych szablonów.
Ćwiczenie 6
Napisz szablon generujący funkcję implementujący iloczyn macierzy i wektora o elementach:
void matrix_v<N>(double *A,double *v,double *u)
powoduje obliczenie:
Tablica jest reprezentowana w pamięci zgodnie z konwencją , tzn. elementowi odpowiada .