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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
m Zastępowanie tekstu - "\aligned" na "\begin{align}"
m Zastępowanie tekstu – „ \displaystyle ” na „”
Linia 95: Linia 95:
<math>sin(x)</math>:
<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>> (x)=x-\frac{x^3}{3!}+\cdots +(-1)^{N+1}\frac{(x)^{2N-1}}{(2N-1)!}
</math></center>
</math></center>
Możesz skorzystać z rozwiązań wcześniejszych zadań.
Możesz skorzystać z rozwiązań wcześniejszych zadań.

Wersja z 08:48, 28 sie 2023

Ć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 NM. Np.:

Pow<3,4>::val;

powinno mieć wartość 81.

Rozwiązanie

Ćwiczenie 3

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

Podpowiedź
Rozwiązanie

Ć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)!

Możesz skorzystać z rozwiązań wcześniejszych zadań.

Rozwiązanie

Ćwiczenie 5

Napisz szablon generujący funkcję implementującą iloczyn skalarny dwu wektorów:

template<size_t N> double inner(double *x, double *y);

Parametrem szablonu ma być dlugość mnożonych wektorów.

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

Ćwiczenie 6

Rozszerz powyższy szablon tak, aby również typ elementów wektora był parametrem szablonu:

template<size_t N, typename T> T dot(T *x, T *y);
Podpowiedź
Rozwiązanie

Ćwiczenie 7

Napisz szablon generujący funkcję implementującą iloczyn macierzy NxM i wektora o M elementach:

 void matrix_v<N>(double *A,double *v,double *u)
u0=A0,0v0+A0,1v1++A0,M1vM1u1=A1,0v0+A1,1v1++A1,M1vM1uN1=AN1,0v0+AN1,1v1++AN1,M1vM1

Tablica A jest reprezentowana w pamięci zgodnie z konwencją C, tzn. wiersz po wierszu: elementowi Ai,j odpowiada A[M*i+j].

Rozwiązanie