Zaawansowane CPP/Ćwiczenia 8: Metaprogramowanie: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Rogoda (dyskusja | edycje)
Nie podano opisu zmian
Mirek (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
{{cwiczenie|1||
{{cwiczenie|1||


Napisać szablon funkcji lub klasy wyliczający  
Napisz szablon funkcji lub klasy wyliczający  
funkcję silnia:
funkcję silnia:
<center><math>\displaystyle  
<center><math>\displaystyle  
Linia 7: Linia 7:
</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">Rozwiązanie</span><div class="mw-collapsible-content" style="display:none">
Patrz plik [http://osilek.mimuw.edu.pl/images/b/b1/Word_rozw.cpp word_rozw.cpp].
</div></div>
{{cwiczenie|2||
{{cwiczenie|2||


Zmodyfikować szablon <code><nowiki>Sqrt</nowiki></code> tak aby liczył
Zaimplementuj szablon <code><nowiki>Pow<N,M></nowiki></code> obliczający
całkowite przybliżenie logarytmu liczby <math>\displaystyle N</math> o dowolnej całkowitej
<math>\displaystyle N</math>. Np.:
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:
  Pow<3,4>::val;
<center><math>\displaystyle
 
P^{\log_P(N)}=N
powinno mieć wartość 81.
</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">
<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">

Wersja z 10:07, 21 wrz 2006

Ćwiczenie 1

Napisz szablon funkcji lub klasy wyliczający funkcję silnia:

n!=n(n1)(n2)1
Rozwiązanie

Ćwiczenie 2

Zaimplementuj szablon Pow<N,M> obliczający N. Np.:

Pow<3,4>::val;

powinno mieć wartość 81.

Wskazówka

Ćwiczenie 3

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

Wskazówka

Ćwiczenie 4

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

sin <N> (x)=xx33!++(1)N+1(x)2N1(2N1)!

Ćwiczenie 5

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

inner <N> (x,y)=x1y1+yNxN

Ć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:

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 A jest reprezentowana w pamięci zgodnie z konwencją C, tzn. elementowi Ai,j odpowiada A[M*i+j].