Programowanie funkcyjne/Strumienie/Ćwiczenia: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
 
 
(Nie pokazano 4 wersji utworzonych przez 2 użytkowników)
Linia 1: Linia 1:
==Ćcwiczenia==
+
== Praca domowa ==
Zdefiniuj strumienie i narysuj schematy odpowiadające tym definicjom:
+
* Zdefiniuj strumień silni.
 +
* Zdefiniuj przeplot elementów dwóch strumieni, tzn. strumień powstały z ułożenia naprzemian elementów danych strumieni. [można to zrobić sprytnie, zamieniając w wywołaniu rekurencyjnym miejscami argumenty.]
 +
* Dany jest nieskończony strumień liczb <math>s = (s_1, s_2, s_3, \dots)</math>. Jego strumień różnicowy, to strumień postaci: <math>s' = (s_2-s_1, s_3-s_2, s_4-s_3, \dots)</math>. Strumień różnicowy drugiego stopnia, to strumień różnicowy strumienia różnicowego. Ogólniej, strumień różnicowy <math>n</math>-tego stopnia polega na <math>n</math>-krotnym wzięciu strumienia różnicowego, zaczynając od <math>s</math>. Zdefiniuj, w sposób uwikłany, strumień złożony z pierwszych elementów strumieni różnicowych kolejnych stopni <math>(s_1, s_2-s_1, (s_3-s_2)-(s_2-s_1), \dots)</math>.
 +
 
 +
==Ćwiczenia==
 
* Zdefiniuj procedurę <tt>for_each</tt>, która wykonuje zadaną procedurę na kolejnych elementach strumienia.
 
* Zdefiniuj procedurę <tt>for_each</tt>, która wykonuje zadaną procedurę na kolejnych elementach strumienia.
* Zdefiniuj procedurę <tt>print_int_stream</tt> wypisującą elementy strumienia liczb całkowitych.  
+
* Zdefiniuj procedurę <tt>print_int_stream</tt> wypisującą elementy strumienia liczb całkowitych. Użyj do tego celu procedury <tt>for_each</tt> z poprzedniego zadania.  
* Użyj do tego celu procedury <tt>for_each</tt> z poprzedniego zadania.  
+
* Dane są dwa strumienie. Zdefiniuj strumień wszystkich par uporządkowanych zawierających po jednym elemencie z każdego z danych strumieni (w dowolnej kolejności).
* strumień silni,
+
* Zdefiniuj w sposób uwikłany:
* przeplot elementów dwóch strumieni (można sprytnie, zamieniając w wywołaniu rekurencyjnym miejscami argumenty),
+
** strumień liczb całkowitych, które w rozkładzie na liczby pierwsze mają tylko 2, 3 i 5 [R.Hamming],
* strumień wszystkich par (uporządkowanych) elementów z dwóch danych strumieni (w dowolnej kolejności),
+
** strumień złożony z tych dodatnich liczb całkowitych, które w rozkładzie na czynniki pierwsze mają tylko liczby 2 i 3, oraz rozkładają się na nieparzystą liczbę czynników pierwszych,
* strumień liczb całkowitych, które w rozkładzie na liczby pierwsze mają tylko 2, 3 i 5 [R.Hamming],
+
** strumień, którego <math>i</math>-ty wyraz jest równy <math>\frac{(2i)!}{i!}</math>,
* Zdefiniuj w sposób uwikłany strumień, którego <math>i</math>-ty wyraz jest równy <math>\frac{(2i)!}{i!}</math>.
+
** strumień, którego <math>i</math>-ty wyraz jest równy <math>\binom{2i}{i}</math>,
* Zdefiniuj w sposób uwikłany strumień złożony z tych dodatnich liczb całkowitych, które w rozkładzie na czynniki pierwsze mają tylko liczby 2 i 3, oraz rozkładają się na nieparzystą liczbę czynników pierwszych.
+
** strumień zawierający co drugi element danego strumienia.
* Dany jest nieskończony strumień liczb <math>s = (s_1, s_2, s_3, \dots)</math>. Jego strumień różnicowy, to strumień postaci: <math>s' = (s_2-s_1, s_3-s_2, s_4-s_3, \dots)</math>. Strumień różnicowy drugiego rzędu, to strumień różnicowy strumienia różnicowego. Ogólniej, strumień różnicowy <math>n</math>-tego rzędu polega na <math>n</math>-krotnym wzięciu strumienia różnicowego, zaczynając od <math>s</math>. Zdefiniuj, w sposób uwikłany, strumień złożony z pierwszych elementów strumieni różnicowych kolejnych rzędów
+
* Szereg potęgowy <math>a_0 + a_1 x + a_2 x^2 + \dots</math> możemy reprezentować jako strumień jego kolejnych współczynników. Przy takiej implementacji szeregów potęgowych zaimplementuj:
<math>(s_1, s_2-s_1, (s_3-s_2)-(s_2-s_1), \dots)</math>. Narysuj diagram ilustrujący rozwiązanie.  
 
* szereg potęgowy <math>a_0 + a_1 x + a_2 x^2 + \dots</math> możemy reprezentować jako strumień jego kolejnych współczynników; przy takiej implementacji szeregów potęgowych zaimplementuj:
 
 
**pochodną,  
 
**pochodną,  
 
**całkę,  
 
**całkę,  
 
**interpolacje wybranych funkcji (np.: <math>e^x</math>, <math>\ln x</math>, <math>\cos x</math>, <math>\sin x</math>),
 
**interpolacje wybranych funkcji (np.: <math>e^x</math>, <math>\ln x</math>, <math>\cos x</math>, <math>\sin x</math>),
**mnożenie szeregów potęgowych,
+
**mnożenie szeregów potęgowych.
**Niech <math>X</math> będzie szeregiem potęgowym o pierwszym współczynniku równym 1; oblicz odwrotność <math>X</math>, tzn. taki szereg <math>S</math>, że <math>X \cdot S = 1</math>; niech <math>X = 1 + x \cdot X'</math>, wówczas:
+
* Dany jest nieskończony strumień nieskończonych strumieni <i>s</i>. Zdefiniuj jego ,,przekątną'', tzn. głowę głowy, drugi element drugiego strumienia, trzeci element trzeciego strumienia itd.
<center><math>\begin{matrix} (1 + x \cdot X') \cdot S = 1 \\
 
S + x \cdot X' \cdot S = 1 \\
 
S = 1 - x \cdot X' \cdot S \end{matrix}</math></center>
 
**Korzystając z wyników poprzedniego zadania zaimplementuj dzielenie szeregów potęgowych.
 

Aktualna wersja na dzień 21:29, 26 lut 2012

Praca domowa

  • Zdefiniuj strumień silni.
  • Zdefiniuj przeplot elementów dwóch strumieni, tzn. strumień powstały z ułożenia naprzemian elementów danych strumieni. [można to zrobić sprytnie, zamieniając w wywołaniu rekurencyjnym miejscami argumenty.]
  • Dany jest nieskończony strumień liczb . Jego strumień różnicowy, to strumień postaci: . Strumień różnicowy drugiego stopnia, to strumień różnicowy strumienia różnicowego. Ogólniej, strumień różnicowy -tego stopnia polega na -krotnym wzięciu strumienia różnicowego, zaczynając od . Zdefiniuj, w sposób uwikłany, strumień złożony z pierwszych elementów strumieni różnicowych kolejnych stopni .

Ćwiczenia

  • Zdefiniuj procedurę for_each, która wykonuje zadaną procedurę na kolejnych elementach strumienia.
  • Zdefiniuj procedurę print_int_stream wypisującą elementy strumienia liczb całkowitych. Użyj do tego celu procedury for_each z poprzedniego zadania.
  • Dane są dwa strumienie. Zdefiniuj strumień wszystkich par uporządkowanych zawierających po jednym elemencie z każdego z danych strumieni (w dowolnej kolejności).
  • Zdefiniuj w sposób uwikłany:
    • strumień liczb całkowitych, które w rozkładzie na liczby pierwsze mają tylko 2, 3 i 5 [R.Hamming],
    • strumień złożony z tych dodatnich liczb całkowitych, które w rozkładzie na czynniki pierwsze mają tylko liczby 2 i 3, oraz rozkładają się na nieparzystą liczbę czynników pierwszych,
    • strumień, którego -ty wyraz jest równy ,
    • strumień, którego -ty wyraz jest równy ,
    • strumień zawierający co drugi element danego strumienia.
  • Szereg potęgowy możemy reprezentować jako strumień jego kolejnych współczynników. Przy takiej implementacji szeregów potęgowych zaimplementuj:
    • pochodną,
    • całkę,
    • interpolacje wybranych funkcji (np.: , , , ),
    • mnożenie szeregów potęgowych.
  • Dany jest nieskończony strumień nieskończonych strumieni s. Zdefiniuj jego ,,przekątną, tzn. głowę głowy, drugi element drugiego strumienia, trzeci element trzeciego strumienia itd.